-5

在 findbug 中出现以下错误: EQ_COMPARETO_USE_OBJECT_EQUALS 下面是语句:

public int compareTo (OPVest vesting)
{
int c = this.Date.compareTo (vest.Date);
if (c != 0)
return c;

return this.Id - vest.segmentId;
}

请建议。

4

3 回答 3

1

from java Docs

It is strongly recommended, but not strictly required that (x.compareTo(y)==0) == (x.equals(y)). Generally speaking, any class that implements the Comparable interface and violates this condition should clearly indicate this fact. The recommended language is "Note: this class has a natural ordering that is inconsistent with equals."

override equals - and hashCode

and you have some errors in code

 public int compareTo (OPVest vesting)
   {
      int c = this.Date.compareTo (vesting.Date);
       if (c != 0)
         return c;

        return this.Id - vesting.segmentId;
   }
于 2013-05-23T06:27:46.713 回答
0

基本上 FindBugs 抱怨您的 compareTo() 方法与 equals() 不一致

只有当this等于操作数时,您的 compareTo 方法才应返回零。

可能的修复是:

  • 覆盖equals()hashCode()与您的compareTo()方法一致。
  • 使用 aComparator而不是制作此类Comparable,并将其记录为与equals()
  • 记录此类以具有与 不一致的自然顺序equals()。我想这不会让 FindBugs 高兴,但这是一种有效但不鼓励的可能性。

附带说明:请确保如果您返回加法或减法的结果,compareTo()则不会溢出。

于 2013-05-23T06:42:22.103 回答
0

通常,compareTo()当且仅当equals()返回 true 时, 的值才应该返回零。未能满足这一点,可能会导致其他 Java 类出现不可预知的行为。由于默认方法使用不同的标准来比较对象,因此如果您覆盖,请equals()务必覆盖。equals()compareTo()

于 2013-05-23T06:45:36.073 回答