但是为什么一个函数接口应该只有一个抽象方法呢?如果接口有多个抽象方法,为什么这不是函数接口?
如果Java允许有两个抽象方法,那么就需要lambda表达式来提供这两个方法的实现。因为,调用方法不知道从这两个抽象方法中调用哪一个方法。它可以调用一个没有实现的。例如:
如果Java允许这种功能接口
@FunctionalInterface
interface MyInterface {
void display();
void display(int x, int y);
}
那么在执行以下操作时就不可能了。
public class LambdaExpression {
public static void main(String[] args) {
MyInterface ref = () -> System.out.print("It is display from sout");
ref.display(2, 3);
}
}
现在使用Lambda表达式,为什么Java不能允许以下两个,因为它清楚地区分了这两个:
问题内容: 我了解抽象类中的方法都可以是抽象的,也可以不是。但是,为什么不能在“普通”的非抽象类中创建抽象方法呢? 在此先感谢您的解释! 问题答案: 抽象 方法从根本上说,该方法没有实现,需要在 子类中 实现。但是,如果您在 非抽象 类中具有 抽象 方法,则可以实例化该类并获取一个对象,该对象将具有未实现的方法,您将无法调用该方法。 __
问题内容: 可以有一个 实现所有方法 的抽象类-里面没有抽象方法。 例如。: 与拥有与具体类相同的类相比,拥有这样的抽象类(如果有)有什么优势? 我能想到的是,当我将其声明为抽象时,它将不会被实例化。但是,我可以通过将其具体化并将其构造函数设为私有来达到相同的效果。 TIA。 // ================== 编辑:我能想到的另一种用途: 它可能会扩展另一个抽象类或实现一个接口,而不实现
问题内容: 今天,我使用了Eclipse的“拉接口”重构功能来创建基于现有类的接口。该对话框提供了将新界面的所有新方法创建为“抽象”方法的功能。 那会有什么好处? 我认为,允许您将接口方法声明为抽象的事实是该语言的多余且无害的功能,因此不建议特别提倡。 为什么Eclipse支持这种样式,或者为什么有人自愿选择支持这种样式? 澄清:我不是在问为什么接口方法是抽象的,这是显而易见的。我想问为什么人们会
最近,我开始了一个新的项目,其中具有单个抽象方法的所有接口都用来代替。我经常看到有人在界面中添加另一个抽象方法后删除注释。我什么时候问过为什么?他们告诉我,公司里有个不在的人让他们那样做。现在我不确定对显然不会与lambdas一起使用的接口进行注释是不是一个好主意。 现在我看到了一个有用的信息,就是人们甚至在服务中也在使用anotation。我就像一个代码:
问题内容: 将接口声明为抽象有什么意义?接口方法也是如此。有什么意义吗? 例如。 问题答案: 您在哪里遇到过已发布的代码块,任何旧的Java代码库? 这就是 JLS不得不说: 9.1.1.1抽象接口: 每个接口都是隐式抽象的。该修饰符已过时,不应在新程序中使用。 9.4抽象方法声明: 为了与Java平台的较早版本兼容,出于风格考虑,允许但不鼓励为接口中声明的方法冗余地指定abstract修饰符。