gpt4 book ai didi

java - 为什么在 java.util.Comparator 中不强制执行 equals?

转载 作者:太空狗 更新时间:2023-10-29 22:53:04 24 4
gpt4 key购买 nike

无论是在 Javadoc 还是代码本身,Comparator 接口(interface)都定义了:

 int compare(T o1, T o2);
boolean equals(Object obj);

但是这不会给编译带来任何问题:

 Comparator a = new Comparator() {      
@Override public int compare(Object o1, Object o2) {
//..
}
};

但是这样做:

 Comparator a = new Comparator() {      
@Override public boolean equals(Object comparator) {
//..
}
};

接口(interface)是怎么做到允许我们不覆盖方法的?

最佳答案

首先JavaDocs explain显然你应该实现这个方法:

Additionally, this method can return true only if the specified object is also a comparator and it imposes the same ordering as this comparator. Thus, comp1.equals(comp2)implies that sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2)) for every object reference o1 and o2.

但后来:

Note that it is always safe not to override Object.equals(Object).

怎么可能不覆盖 equals(),即使它是接口(interface)的一部分?因为此方法已为 Java 中的每个对象实现 (in Object class)。

接口(interface)中的声明只是为了通过添加额外的 JavaDoc 解释来强调 equals() 相对于 Comparator 的重要性。

顺便说一句,如果你的比较器是无状态的,你应该只有它的一个实例——在这种情况下,默认的 equal() 实现就很好。

关于java - 为什么在 java.util.Comparator 中不强制执行 equals?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11758006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com