首页 > 解决方案 > Comparator 是一个类还是一个接口,如果是后者,它是如何被实例化的?

问题描述

我一直在尝试比较 Java 中的对象,从而比较ComparableandComparator实体。我一直在阅读 Joshua Bloch 的 Effective Java,第三版。

第 70 页:

在 Java 8 中,Comparator接口配备了一组比较器构造方法,可以流畅地构造比较器。在 Java 8 中,Comparator 接口配备了一组比较器构造方法,可以流畅地构造比较器。

第 71 页:

该类Comparator具有完整的构造方法。

那么,它是什么?

我查看了 java 规范,该规范Comparator确实是一个接口,我假设这是我问题的正确答案。那么这只是书中的一个错误吗?

布洛赫接着说:

名为 的静态方法comparing有两个重载。一个人需要一个密钥提取器并使用密钥的自然顺序。第二个需要一个密钥提取器和一个比较器,用于提取的密钥。实例方法有三个重载,命名为thenComparing.

如果Comparator是接口,它怎么会有实例方法?我一直认为接口是不可实例化的。还是我读错了?

标签: javainstantiationcomparator

解决方案


  1. 正如您所说,它是一个界面。API 文档在这方面是规范的,因为它是从代码本身生成的。
  2. 因此,将其称为一个类是一个小口误。
  3. 从 Java 8 开始,接口可以有非抽象实例方法,这就是thenComparing(). (注意default关键字。)

推荐阅读