【发布时间】:2026-01-30 06:35:01
【问题描述】:
我收到以下 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 y
所以,为了规避错误,我尝试手动编写,得到了同样的错误:
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 方法(我得到了),但也要实现自己的哈希……我不明白为什么。任何详细说明将不胜感激。
【问题讨论】:
-
情况相似,但问题不同。我不一定像您的链接问题那样询问如何解决此问题(并且我也确实在原始答案中发布了该问题),但是如果 FindBugs 评估不正确。或者,如果它是正确的,那么当 Java API 似乎另有说明时,它是如何正确的。
-
FindBugs 评估是正确的,如链接问题的答案中所述。