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;
}
よろしくお願いします。
(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;
}
基本的に FindBugs は、あなたの compareTo() メソッドが equals() と矛盾しているという事実について不平を言っています。
this
がオペランドと等しい場合にのみ、compareTo メソッドはゼロを返す必要があります。
可能な修正は次のとおりです。
equals()
しhashCode()
、メソッドが行うことと一致するようにしますcompareTo()
。Comparator
このクラスを作成するのではなくを使用し、Comparable
それを文書化して矛盾するequals()
equals()
ください。これは FindBugs を喜ばせることにはならないと思いますが、有効ではありますが、推奨されない可能性があります。余談ですが、加算または減算の結果を返す場合はcompareTo()
、オーバーフローが発生しないことを確認してください。