java - Comparator 是一个类还是一个接口,如果是后者,它是如何被实例化的?
问题描述
我一直在尝试比较 Java 中的对象,从而比较Comparable
andComparator
实体。我一直在阅读 Joshua Bloch 的 Effective Java,第三版。
第 70 页:
在 Java 8 中,
Comparator
接口配备了一组比较器构造方法,可以流畅地构造比较器。在 Java 8 中,Comparator 接口配备了一组比较器构造方法,可以流畅地构造比较器。
第 71 页:
该类
Comparator
具有完整的构造方法。
那么,它是什么?
我查看了 java 规范,该规范Comparator
确实是一个接口,我假设这是我问题的正确答案。那么这只是书中的一个错误吗?
布洛赫接着说:
名为 的静态方法
comparing
有两个重载。一个人需要一个密钥提取器并使用密钥的自然顺序。第二个需要一个密钥提取器和一个比较器,用于提取的密钥。实例方法有三个重载,命名为thenComparing
.
如果Comparator
是接口,它怎么会有实例方法?我一直认为接口是不可实例化的。还是我读错了?
解决方案
- 正如您所说,它是一个界面。API 文档在这方面是规范的,因为它是从代码本身生成的。
- 因此,将其称为一个类是一个小口误。
- 从 Java 8 开始,接口可以有非抽象实例方法,这就是
thenComparing()
. (注意default
关键字。)
推荐阅读
- javascript - 尝试将逗号分隔的字符串添加到 API 调用末尾时出现 400 错误
- sql-server - 标准化一组数字(删除空值、连续重复、将剩余值向左移动)
- vba - VBA:如何使用 IE 等待弹出窗口
- python-3.x - 将元素附加到字典中的列表会影响深层副本
- vue.js - How to make vuetify navigation drawer to close group with selected item and open group based on url
- ruby-on-rails - Rails Minitest 有很多并且属于模型测试 ActiveRecord::UnknownPrimaryKey 错误
- angular - Apache Web 主机服务器上 Angular Universal 应用程序的 .htaccess 中应该包含什么?
- python - 如何使用 grid_rowconfigure 和 grid_columnconfigure 制作多列表框
- google-cloud-platform - GCP:将流量从全局 HTTP 负载均衡器引导到 istio 内部负载均衡器
- javascript - 无法读取未定义/敲除的属性 x