【问题标题】:Does Java Integer class have a compare method which returns Comparator?Java Integer 类是否有一个返回 Comparator 的比较方法?
【发布时间】:2021-07-18 13:20:59
【问题描述】:

我正在阅读 Java tutorial 并看到这行代码:

Comparator<Integer> normal = Integer::compare;

关于右侧,我尝试查找解释 compare 如何为 Integer 对象返回 Comparator 的文档。但我没有找到。 Java API docs 显示如下:

public static int compare(int x, int y)

我错过了什么?

【问题讨论】:

  • 是什么让您认为compare 返回Comparator?这将如何运作?
  • Integer::compare 将方法称为 lambda,它会自动强制转换为可比较的 b/c 可比较是支持从 lambda 强制转换的接口之一。
  • 我认为支持 lambda 强制转换的接口术语是功能接口
  • Integer::compare 是一个方法引用,它是定义功能接口实现的一种方式。该方法引用等同于(a, b) -&gt; Integer.compare(a, b),它是一个lambda 表达式
  • @JörgWMittag - 你最初的反应似乎有点苛刻。我想 OP 的思考过程是,由于 RHS 上的“某物”生成了一个可分配给 Comparator 的值,因此“比较”方法以某种方式“返回”它。我们可能知道该方法甚至没有被调用,但 OP 显然没有,否则他不需要问这个问题。

标签: java comparator method-reference


【解决方案1】:

Comparator&lt;T&gt; 是一个带有签名int compare(T o1, T o2); 的功能接口。来自 java.util.functiondocumentation:“函数式接口为 lambda 表达式和方法引用提供目标类型。”

方法Integer#compare(int x, int y) 匹配此签名。因此可以将其方法引用分配给Comparator&lt;Integer&gt; 类型的变量。

为了更好地理解这一点,我建议您阅读lambda expressionsmethod references 和功能接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2017-06-26
    • 2021-09-21
    • 2022-06-10
    相关资源
    最近更新 更多