我一直在学习接口比较器,听说equals方法继承自Object类。
这怎么可能?难道一个接口不能从另一个接口继承吗?
所有实现接口的类都必须(直接或间接)扩展Object,因此有一个equals方法。
方法在接口中被重写纯粹是为了文档目的,比如这样,允许为接口的实现提供额外的约束(或更详细的信息)。
Comparator.equals
的Javadoc的重要部分是:
此方法必须服从
Object.equals(Object)
的总契约。此外,只有当指定的对象也是比较器,并且它与这个比较器施加相同的顺序时,该方法才能返回true。
所以,这是说Comparator.equals
的实现比更一般的Object.equals
方法提供了更强的保证:如果这个方法说两个东西相等,那么它们必须以相同的方式排序对象。
话虽如此,我从未见过Comparator
的实现覆盖equals
。毕竟,这只是一个比较的东西——你需要多久比较一次这样的东西?
我能想到的唯一有用的情况是,如果你正在构建一个List<Comparator<Something>>
,并且不想有多个强加相同顺序的比较器。耸耸肩——也许这只是我想象力的失败,没有想到更有用的东西。
默认情况下,equals方法继承自Object类,它是所有类的父类。默认的equals方法作为==操作符。如果对象引用在内存中指向相同的对象,则比较它们