8

想知道列出的方法需要做什么

 public final int compareTo(final FieldDTO o) {
        return o.available.compareTo(this.available);

它在第 2 行抛出异常说明不良做法 - 类定义 compareTo(...) 并使用 Object.equals() 16 天
字段定义 compareTo(FieldDTO) 并使用 Object.equals()

不知道我应该如何处理这个。提前致谢。

4

3 回答 3

12

如果你定义compareTo你至少应该定义equals

boolean equals(it) { 
  return compareTo(it) == 0; 
} 

否则当你把你的对象放在Maps 和Sets 中时你会遇到奇怪的问题。通常也定义hashCode.

于 2013-05-22T20:42:42.473 回答
8

您需要覆盖 Object 类的 equals() 和 hashCode() 方法。为这些使用 IDE 生成的代码,它将提取所有对象属性并为您创建方法。

在 Eclipse IDE 上:

  1. 右键单击类
  2. 选择来源
  3. 生成 hashCode() 和 equals()...
于 2015-08-24T20:10:06.963 回答
7

这是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.

于 2013-05-22T20:32:59.120 回答