【问题标题】:What does function interface do in the lambda expression? [duplicate]函数接口在 lambda 表达式中做了什么? [复制]
【发布时间】:2017-11-25 10:01:34
【问题描述】:
@FunctionalInterface
public interface myFunction<T> {
  abstract double apply(T t);
}

以上代码是我的功能界面。

以下代码是我的 lambda 表达式。函数式接口在我的 lambda 表达式中做了什么,因为只有一个简单的“双精度”?如果没有功能界面,会是怎样的?

import java.util.HashSet;

public class TestFindArea {
public static double findArea(myFunction<Double> f,double a,double b){
    return (f.apply(a)+f.apply(b))*(b-a)/2;
}
    public static void main(String[] args) {
        System.out.println(findArea((x) -> x+2 , 4, 8) );

【问题讨论】:

  • 您是在问@FunctionalInterface 注释的用途吗?还是您要求解释您的代码?我不明白你在问什么。另外,请尊重 Java 命名约定。类和接口用大写字母加星标。
  • 我不明白为什么在函数式编程中必须有一个函数式接口,接口是做什么的。
  • 在函数式编程中,不一定要有函数式接口。基本原理是将函数传递给其他函数。但是Java是一种面向对象的语言,并没有对函数的直接支持。虽然它支持接口。因此,Java 设计者选择使用具有单一方法的接口来表示函数类型。 lamda 表达式是这些功能接口的实例。其他函数式语言,例如 JavaScript 或 Kotlin,不需要这样的接口。他们可以只定义顶级函数并直接传递它们。你问的是这个吗?
  • 因缺乏先前的研究而被否决。

标签: java lambda functional-programming


【解决方案1】:

函数式接口在我的 lambda 表达式中有什么作用 只有一个简单的“双重”?

你的函数式接口代表一个函数,它接受一个泛型类型T并返回一个双精度,这意味着无论我们使用函数式接口作为目标类型,最终,我们都需要分配或传递一个满足该函数的函数其SAM 的描述符。因此,在您的情况下,findArea((x) -&gt; x+2 , 4, 8) 的第一个参数是传递给findArea 方法的函数,可以读取为 “给定一个 Double 类型的数字,将数字 2 添加到它并返回结果".

如果没有功能界面,会是什么样子?

那么您不能将函数作为参数传递给其他函数,也不能将函数用作其他函数的返回类型,也不能将 lambda 表达式分配给接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多