在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;
}
请建议。
答案 0 :(得分:1)
强烈建议,但并非严格要求 (x.compareTo(y)== 0)==(x.equals(y))。一般来说,任何课程 实现Comparable接口并违反此条件 应该清楚地表明这一事实。推荐的语言是“注意: 这个类的自然顺序与equals不一致。“
覆盖equals
- 和hashCode
你的代码中有一些错误
public int compareTo (OPVest vesting)
{
int c = this.Date.compareTo (vesting.Date);
if (c != 0)
return c;
return this.Id - vesting.segmentId;
}
答案 1 :(得分:0)
基本上,FindBugs抱怨your compareTo() method is inconsistent with equals()。
这一事实只有当this
等于操作数时,你的compareTo方法才会返回零。
可能的修复方法是:
equals()
和hashCode()
以符合compareTo()
方法的效果。Comparator
而非制作此类Comparable
,并将其记录为与equals()
equals()
不一致的自然顺序。我想这不会让FindBugs感到高兴,但这是一种有效但又令人沮丧的可能性。作为旁注:请确保如果您返回compareTo()
的加法或减法结果,则无法获得溢出。
答案 2 :(得分:0)
通常,当且仅当compareTo()
返回true时,equals()
的值才应返回零。如果不满足此要求,可能会在其他Java类中导致不可预测的行为。由于默认equals()
方法使用不同的条件来比较对象,因此如果您覆盖equals()
,请务必覆盖compareTo()
。