【发布时间】:2021-06-28 14:27:36
【问题描述】:
我正在尝试理解函数式接口和 lambda 函数。我找不到关于函数式接口中的函数如何将其与 lambda 函数连接起来的解释,也就是说,假设有这样一个函数式接口
@FunctionalInterface
interface MyPredicate {
boolean test(Integer value);
}
现在我们将函数接口的变量分配给 lambda 函数:
public class Tester {
public static void main(String[] args) throws Exception {
MyPredicate myPredicate = x -> x > 0;
System.out.println(myPredicate.test(10)); //true
}
}
我很想知道为什么在拨打myPredicate.test(10) 时会拨打x > 0。
也就是说,我是否正确理解,当我们分配一个 lambda 函数时,编译器会以某种方式将函数接口中的函数与 lambda 函数的主体连接起来?只是继承和覆盖通常用于此,但这里编译器会它或如何?我很高兴有解释来理解这个问题
【问题讨论】:
-
功能接口只有一个未实现的方法。 Lambda 只实现了一种方法。
-
这能回答你的问题吗? Why Functional Interfaces in Java 8 have one Abstract Method? this one 还有一些其他细节。
-
@Turing85 但是如果 lambda 是一个函数式接口,那么它就不能有一个实现,不是吗?
-
lambda 表达式不是函数式接口,它实现函数式接口。
-
“但如果 lambda 是一个函数式接口” ... Turing85 不是这样写的,他们写的是“Lambda 实现正是一种方法” .