在 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;
}
请建议。
在 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;
}
请建议。
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;
}
基本上 FindBugs 抱怨您的 compareTo() 方法与 equals() 不一致。
只有当this
等于操作数时,您的 compareTo 方法才应返回零。
可能的修复是:
equals()
并hashCode()
与您的compareTo()
方法一致。Comparator
而不是制作此类Comparable
,并将其记录为与equals()
equals()
。我想这不会让 FindBugs 高兴,但这是一种有效但不鼓励的可能性。附带说明:请确保如果您返回加法或减法的结果,compareTo()
则不会溢出。
通常,compareTo()
当且仅当equals()
返回 true 时, 的值才应该返回零。未能满足这一点,可能会导致其他 Java 类出现不可预知的行为。由于默认方法使用不同的标准来比较对象,因此如果您覆盖,请equals()
务必覆盖。equals()
compareTo()