Dar*_*Var 30 java lambda java-8
学习Java 8 Lambdas,只是想知道编译器如何知道Comparator中哪个方法用于lambda表达式?它似乎不是SAM接口?它有2个抽象方法:
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
}
Run Code Online (Sandbox Code Playgroud)
JB *_*zet 45
equals()不是一种抽象的方法.此方法将覆盖Object.equals(Object),并且只有Comparator接口才能将javadoc附加到方法,解释比较器应如何实现equals().
请参阅FunctionalInterface的javadoc:
如果接口声明了一个覆盖java.lang.Object的公共方法之一的抽象方法,那么它也不会计入接口的抽象方法计数,因为接口的任何实现都将具有java.lang.Object或其他地方的实现.
equals()继承自 Object,在判断接口是否为函数式接口时,不计算继承的公共方法。所以即使在 Comparator 中equals()是抽象的,因为它是继承的,所以它不算数。
RULE: 甲功能接口是具有一个抽象方法的接口。默认方法不算;静态方法不算;并从Object继承的方法不计。
| 归档时间: |
|
| 查看次数: |
3753 次 |
| 最近记录: |