当前位置: 首页 > 知识库问答 >
问题:

为什么不在Java8中函数接口中使用多个抽象方法?[副本]

赵宏达
2023-03-14
@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;

共有1个答案

巫马瀚漠
2023-03-14

答案是,为了创建一个有效的实现,您需要能够一次传递N个lambda,这将引入很多歧义和可读性的巨大下降。

另一件事是@functionalinterface用于表示一个接口,该接口可以用作lambda表达式的目标,而lambda是一个函数。

无论如何,您的示例是无效的,不会编译,因为它试图在函数接口上创建两个不完整的实现。

 类似资料:
  • 但是为什么一个函数接口应该只有一个抽象方法呢?如果接口有多个抽象方法,为什么这不是函数接口?

  • 当我看到Iterable接口源时,它看起来像方法和方法不是抽象的。接口如何具有非抽象方法?还是我在这件事上漏掉了什么?请参阅下面的接口源代码。

  • 上面的代码引发了以下问题:中找到了多个非重写抽象方法。 这个错误是什么意思?

  • 最近,我开始了一个新的项目,其中具有单个抽象方法的所有接口都用来代替。我经常看到有人在界面中添加另一个抽象方法后删除注释。我什么时候问过为什么?他们告诉我,公司里有个不在的人让他们那样做。现在我不确定对显然不会与lambdas一起使用的接口进行注释是不是一个好主意。 现在我看到了一个有用的信息,就是人们甚至在服务中也在使用anotation。我就像一个代码:

  • 我试图给出一个完整的答案: "为什么/何时使用抽象类而不是接口。" 并寻找以下方面的验证/建议。 对此的一个答案是, 在具体类来定义特定类型之前,抽象类通常位于继承层次结构中接口的正下方(就像Java API中的许多示例一样),实现并固定接口定义的结构的一些公共方面。 使用抽象类的另一个很好的理由是类型之间有一个清晰的逻辑层次结构。抽象类具有组织层次结构的作用,同时通过作为抽象类而不是具体类,迫使

  • 如果有人能给出我在Java15中需要在接口类和抽象类之间做出选择的1-2个场景示例,我将非常感激。此外,如果它能在现实生活中的项目,而不是动物或形状类的例子,将是伟大的。 谢谢!!