3

equals()如果该方法java.util.Comparator已经在类中实现,为什么它是抽象的Object

4

1 回答 1

5

首先,值得注意的是该方法不是“抽象的”。如果您实施Comparator<T>而不实施equals(),您的代码编译。您的课程将简单地使用由Object.

至于为什么要重新声明方法,这样做是因为contract onComparator<T>.equals()比contract on 更严格Object.equals()。这在文档中进行了解释:

此外,只有当指定的对象也是一个比较器并且它强制执行与此比较器相同的排序时,此方法才能返回 true。因此,对于每个对象引用 o1 和 o2,comp1.equals(comp2) 意味着 sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2))。

如果Comparator没有 override equals(),就没有好的方法来指定它的合约equals()Object's 不同。

于 2013-03-04T13:10:00.187 回答