我正在阅读Java教程,看到了这行代码:
Comparator<Integer> normal = Integer::compare;
关于右侧,我尝试寻找文档来解释比较如何返回整数对象的比较器。但我没有找到。 Java API docs 显示以下内容:
public static int compare(int x, int y)
我错过了什么?
Comparator<T>
是一个具有签名int compare(T o1, T o2);
的功能接口。来自 java.util.function 的 documentation:“函数接口为 lambda 表达式和方法引用提供目标类型。”
方法
Integer#compare(int x, int y)
与此签名匹配。因此,它的方法引用可以分配给类型为 Comparator<Integer>
的变量。
Integer 类仅实现
Comparable
接口。
Integer类中的
compare
方法不是Comparator's
compare
方法的实现。 compare
是 Integer 类本身的静态辅助方法。
甚至在 Java 8 之前,我们在
compare
类中就有 Integer
方法。 Integer 类在这种情况下有两种方法,一种是
public static compare(Integer val1,Integer val2)
另一个
public int compareTo(Integer val)
。 //可比较的接口实现
因此,如果您调用
compare
类的 Integer
方法,它内部仍然会调用 Integer 类中定义的 compareTo
接口的 Comparable
方法的实现,如下所示。
public static int compare(int x, int y) {
Integer.valueOf(x).compareTo(Integer.valueOf(y));
}