最近我开始探索 Java 8,我不太了解 Java 实现 lambda 表达式所必需的“函数式接口”的概念。在 Java 中有一个非常全面的 lambda 函数指南,但我卡在了定义函数接口概念的那一章。定义如下:
更准确地说,函数式接口被定义为只有一个抽象方法的任何接口。
然后他继续举例,其中一个是Comparator
接口:
public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); }
我能够测试我可以使用 lambda 函数代替 Comparator 参数并且它可以工作(即Collections.sort(list, (a, b) -> a-b)
)。
但是在 Comparator 接口中,方法compare
和equals
方法都是抽象的,这意味着它有两个抽象方法。那么,如果定义需要一个接口只有一个抽象方法,这怎么能工作呢?我在这里想念什么?