Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当比较器有两个抽象方法时,它如何成为一个功能接口?_Java_Java 8_Comparator_Functional Interface - Fatal编程技术网

Java 当比较器有两个抽象方法时,它如何成为一个功能接口?

Java 当比较器有两个抽象方法时,它如何成为一个功能接口?,java,java-8,comparator,functional-interface,Java,Java 8,Comparator,Functional Interface,在Java8中,引入了@functionanterface注释来表示只有一个抽象方法作为函数接口的任何接口。引入它的原因之一是为了向用户(程序员)表明lambda表达式可以在函数接口的上下文中使用 比较器接口用@functional接口注释。但是,有两种方法是抽象的 int compare(T o1, T o2); 及 在的文件中,明确提到: 从概念上讲,函数接口只有一个抽象方法 equals方法在这里不被认为是抽象的吗 文件还说明: 如果接口声明了一个抽象方法,该方法覆盖了java.lang

在Java8中,引入了
@functionanterface
注释来表示只有一个抽象方法作为函数接口的任何接口。引入它的原因之一是为了向用户(程序员)表明lambda表达式可以在函数接口的上下文中使用

比较器
接口用
@functional接口
注释。但是,有两种方法是抽象的

int compare(T o1, T o2);

在的文件中,明确提到:

从概念上讲,函数接口只有一个抽象方法

equals
方法在这里不被认为是抽象的吗

文件还说明:

如果接口声明了一个抽象方法,该方法覆盖了
java.lang.Object
的一个公共方法,则该方法也不计入接口的抽象方法计数,因为接口的任何实现都将有一个来自
java.lang.Object
或其他地方的实现

由于
equals
是这些方法之一,因此接口的“抽象方法计数”仍然是1。

也来自:

如果接口声明了一个抽象方法覆盖了
java.lang.Object
的一个公共方法,那么也不会计入接口的抽象方法计数,因为接口的任何实现都将有一个来自
java.lang.Object
或其他地方的实现。[我的重点]

由于是
对象的公共方法
,因此本声明适用;因此,对于
Comparator
而言,只有
compare
方法有助于抽象方法计数


这条规则适用的其他值得注意的方法是和。

“概念上”可能是这里的关键词,与“实际”不同。
equals
继承自
Object
。因此,函数接口只有一个原始抽象方法。
boolean equals(Object obj);