查看Comparator
类; 它有两个抽象方法,为什么它可以是一个函数接口?
Comparator.java
package java.util;
@FunctionalInterface
public interface Comparator<T> {
// abstract method
int compare(T o1, T o2);
// abstract method
boolean equals(Object obj);
// few default and static methods
}
功能接口定义
从概念上讲,功能接口仅具有一种抽象方法。 由于默认方法具有实现,因此它们不是抽象的。 如果接口声明了一个覆盖java.lang.Object的公共方法之一的抽象方法,则该方法也不计入接口的抽象方法计数,因为该接口的任何实现都将具有java.lang.Object或其他地方的实现。
回答
是的, Comparator
是一个功能接口。 equals
是覆盖java.lang.Object
的公共方法之一的抽象方法,这不算作抽象方法。
boolean equals(Object obj);
Comparator
只有一个抽象方法int compare(T o1, T o2)
,它满足功能接口的定义。
Comparator.java
package java.util;
@FunctionalInterface
public interface Comparator<T> {
// abstract method
int compare(T o1, T o2);
// abstract method, overriding public methods of `java.lang.Object`
// this doesn't count!
boolean equals(Object obj);
// few default and static methods
}
参考文献
翻译自: https://mkyong.com/java8/is-comparator-a-function-interface-but-it-has-two-abstract-methods/