【发布时间】:2020-07-10 19:02:17
【问题描述】:
我正在练习 lambda 函数,我知道要使用它们,我们需要创建一个函数式接口,它只包含一个未实现的抽象方法。
所以我想知道为什么 java 不允许多个抽象方法,即使它们具有不同的签名。所以我通读了有关 Stack Overflow 的相关问题。这就是我得到的。 similar question
答案是,为了创建一个有效的实现,您需要能够一次传递 N 个 lambda,这会带来很多歧义并大大降低可读性。
现在我做了一个小实验,我创建了一个接口,其中包含两个具有不同签名的已实现抽象方法。
这是myInterface接口
interface MyInterface {
abstract void func();
abstract void func(int i);
}
并像我们通常做的那样实现一个函数,另一个作为 lambda 表达式实现
这是Lambda类
class Lambda implements MyInterface{
public void doWork(MyInterface myInterface) {
myInterface.func();
}
public static void main(String[] args) {
Lambda lambda = new Lambda();
lambda.doWork( e -> System.out.println("func:" + e ));
}
@Override
public void func() {
System.out.println("func");
}
}
显然这段代码不起作用。我只是无法理解,即使我有两个不同的签名,即使其中一个被正常实现,那么为什么我们不能用 lambda 实现另一个剩余的方法。它与代码质量和可维护性有关吗?谁能解释我无法理解它?如果可能,请举个例子。
【问题讨论】:
-
对于接口中的方法使用
public和abstract是不必要的,因此建议避免使用。您在main方法中传递的 lambda 与Lambda类根本没有关系,因此您的问题没有多大意义。无论如何,规范说一个功能接口不能有多个抽象方法。因此,规范不能使用具有两个抽象方法的接口。
标签: java lambda functional-interface