我得到以下Findbugs错误,类似于here概述的错误:
此类定义compareTo(...)方法,但从java.lang.Object继承其equals()方法。
对于我班级内的这种方法:
Public class MyClass {
public int getCost() { ... }
@Override
public final int compareTo(MyClass other) {
return Integer.compare(this.getCost(), other.getCost());
}
}
而且我认为这不太正确 - 使用Integer.compare
,根据API:
如果x == y,则值为0;如果x <y,则小于0的值;如果x> y,则值大于0
因此,为了避免错误,我尝试手动编写,并得到了同样的错误:
public class MyClass {
public int getCost() { ... }
public final int compareTo(Myclass other) {
if (this.finalCost < other.getFinalCost()) {
return 1;
} else if (this.getCost() > other.getCost() ) {
return -1;
} else {
return 0;
}
}
现在,我甚至根本没有定义或使用equals()
方法。这是一个FindBugs错误吗?
另外,我读过的很多建议都是为了实现你自己的equals方法(我得到的),还有你自己的哈希...我不明白为什么。任何详细说明将不胜感激。
compareTo的实现在此类中被重写,但equals的实现继承自Object类,因此使用不同的逻辑。这可能会导致compareTo()返回0,但equals()返回false;