我收到以下Findbugs错误,类似于概述here的错误:
此类定义compareTo(...)方法但继承其equals() java.lang.Object中的方法。
我班上的这个方法:
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 <1,则小于0的值。 Ÿ;和一个价值 如果x> 0,则大于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方法(我得到的),还有你自己的哈希...我不明白为什么。任何详细说明将不胜感激。
答案 0 :(得分:0)
compareTo的实现在此类中被重写,但是equals的实现是从Object类继承的,因此使用了不同的逻辑。 这可能会导致compareTo()返回0,而equals()返回false的情况;