@FunctionalInterface
interface MyLambda {
void apply1();
int apply2(int x, int y);
}
现在使用Lambda表达式为什么Java不能允许两个以下,因为它明确区分了两者:
MyLambda ml1 = () -> System.out.println("Hello");
MyLambda ml2 = (x, y) -> x+y;
答案 0 :(得分:3)
答案是,为了创建一个有效的实现,你需要能够同时传递N个lambdas,这会引入很多歧义并且可读性大大降低。
另一个问题是@FunctionalInterface
用于表示可用作lambda表达式的目标的接口,而lambda是SINGLE函数。
无论如何,你的例子是无效的,不会编译,因为它试图在功能界面上创建两个不完整的实现。
答案 1 :(得分:1)
功能界面是一个只有一个抽象的界面 方法(除了Object的方法),从而代表一个 单一功能合同。这个"单身"方法可以采取的形式 具有覆盖等效签名的多个抽象方法 继承自超级接口;在这种情况下,继承的方法 逻辑上代表一种方法。
https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.8
答案 2 :(得分:1)
编写Lamba表达式意味着我们正在实现作为功能接口的接口。它应该有一个抽象方法,因为在lambda表达式时,我们一次只能提供一个实现。 所以在问题中发布的代码片段中,我们在任何时候只给出一个实现,同时声明Lambda,我们必须为两个抽象方法实现。
感谢您的帮助。