为什么java.util.Comparator中的equals()方法是抽象的?

时间:2013-03-04 13:06:07

标签: java

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

1 个答案:

答案 0 :(得分:4)

首先,值得注意的是该方法并非“抽象化”。如果您在未实施Comparator<T>的情况下实施equals(),则代码编译。您的课程将简单地使用Object提供的实施。

至于为什么要重新声明方法,这是因为Comparator<T>.equals()上的合同比Object.equals()上的合同更严格。这在documentation

中有解释
  

此外,仅当指定的对象也是比较器并且它与此比较器施加相同的顺序时,此方法才能返回true。因此,comp1.equals(comp2)意味着每个对象引用o1和o2的sgn(comp1.compare(o1,o2))== sgn(comp2.compare(o1,o2))。

如果Comparator未覆盖equals(),则无法指定其equals()上的合同与Object的合同不同。