Comparator<T> 如何成为函数式接口?

Jas*_*Hal 3 java oop functional-interface

根据功能接口的定义 -功能接口是仅包含一个抽象方法的接口。

但是Comparator<T>有两个抽象方法:

int compare(T o1, T o2);

boolean equals(Object obj);
Run Code Online (Sandbox Code Playgroud)

其他是默认和静态的。

JavaDocs 将其称为功能接口。怎么会这样?

rzw*_*oot 8

您正在阅读错误的定义,或者至少是(过度)简化的定义。

FunctionalInterface 的正确定义是:

函数式接口是只有一个抽象方法(除了 Object 的方法)的接口,因此表示单个函数契约。这种“单一”方法可以采用多个抽象方法的形式,并具有从超接口继承的覆盖等效签名;在这种情况下,继承的方法在逻辑上代表一个方法。

来源:Java 语言规范第 9.8 节