想知道列出的方法需要做什么
public final int compareTo(final FieldDTO o) {
return o.available.compareTo(this.available);
它在第2行引发异常
糟糕的做法 - 类定义compareTo(...)并使用Object.equals()16天
field定义compareTo(FieldDTO)并使用Object.equals()
不知道我该怎么办呢。 提前谢谢。
答案 0 :(得分:9)
如果您定义compareTo
,则至少应定义equals
boolean equals(it) {
return compareTo(it) == 0;
}
否则当您将对象放入Map
和Set
时,您会遇到奇怪的问题。通常也应该定义hashCode
。
答案 1 :(得分:5)
这是FindBugs的文档:
Eq:Class定义compareTo(...)并使用Object.equals() (EQ_COMPARETO_USE_OBJECT_EQUALS)
此类定义compareTo(...)方法但继承其equals() java.lang.Object中的方法。通常,compareTo的值应该是 当且仅当equals返回true时返回零。如果违反此规定, 奇怪和不可预测的失败将发生在类如 的PriorityQueue。在Java 5中,PriorityQueue.remove方法使用 compareTo方法,而在Java 6中它使用equals方法。
来自Comparable接口中compareTo方法的JavaDoc:
强烈建议,但并非严格要求 (x.compareTo(y)== 0)==(x.equals(y))。一般来说,任何课程 实现Comparable接口并违反此条件 应该清楚地表明这一事实。推荐的语言是“注意: 这个类的自然顺序与equals不一致。“
因此,您似乎需要实现equals
方法,从而覆盖Object
的默认实现。
答案 2 :(得分:4)
您需要重写Object类equals()和hashCode()方法。 使用IDE生成的代码,它将拉出所有Object属性并为您创建方法。
在eclipse IDE上:
答案 3 :(得分:0)
您的课程似乎实现了Comparable
界面。
JavaDocs在这里是严格的:如果您使用自己的compareTo()
方法,则只有equals()
方法返回 true 时才返回0。
所以:
(x.compareTo==0) == (x.equals).