Java 8中的比较器接口如何变成@FunctionalInterface

Rit*_*Das 4 java java-8

我想澄清一下我的理解@FunctionalInterface。据我所知,我们可以在只有一个抽象方法的接口上添加@FunctionalInterface注释(尽管它可以具有多个默认和静态方法。

在Java 8中,Comparator<T>接口已用@FunctionalInterface标记,因此可以在Lambda表达式中使用,但是当我打开定义时,可以看到那里有2个抽象类

int compare(T o1, T o2);boolean equals(Object obj);

我想了解在功能接口中怎么可能有两个以上的抽象方法,而仍然没有收到任何错误?帮助我清除对此的理解。

Ful*_*Guy 6

您的问题在注释的Java文档中得到了回答@FunctionalInterface

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

因此boolean equals(Object obj);,Comparator接口中存在的存在不会增加接口中存在的抽象方法的数量,因此我们可以将其应用于@FunctionalInterface此接口。