想知道列出的方法需要做什么
public final int compareTo(final FieldDTO o) {
return o.available.compareTo(this.available);
它在第 2 行抛出异常说明不良做法 - 类定义 compareTo(...) 并使用 Object.equals() 16 天
字段定义 compareTo(FieldDTO) 并使用 Object.equals()
不知道我应该如何处理这个。提前致谢。
如果你定义compareTo
你至少应该定义equals
boolean equals(it) {
return compareTo(it) == 0;
}
否则当你把你的对象放在Map
s 和Set
s 中时你会遇到奇怪的问题。通常也定义hashCode
.
您需要覆盖 Object 类的 equals() 和 hashCode() 方法。为这些使用 IDE 生成的代码,它将提取所有对象属性并为您创建方法。
在 Eclipse IDE 上:
这是FindBugs的文档:
Eq:类定义 compareTo(...) 并使用 Object.equals() (EQ_COMPARETO_USE_OBJECT_EQUALS)
这个类定义了一个 compareTo(...) 方法,但是从 java.lang.Object 继承了它的 equals() 方法。通常,当且仅当 equals 返回 true 时,compareTo 的值才应返回零。如果违反这一点,就会在诸如 PriorityQueue 之类的类中发生奇怪且不可预知的故障。在 Java 5 中,PriorityQueue.remove 方法使用 compareTo 方法,而在 Java 6 中,它使用 equals 方法。
来自 Comparable 接口中 compareTo 方法的 JavaDoc:
强烈建议但不严格要求 (x.compareTo(y)==0) == (x.equals(y))。一般来说,任何实现了 Comparable 接口并违反此条件的类都应该清楚地表明这一事实。推荐的语言是“注意:这个类有一个与equals不一致的自然顺序。”
因此,您似乎需要实现该equals
方法,从而覆盖来自Object
.