-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

Java ドキュメントから

(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;
   }
于 2013-05-23T06:27:46.713 に答える
0

基本的に FindBugs は、あなたの compareTo() メソッドが equals() と矛盾しているという事実について不平を言っています。

thisがオペランドと等しい場合にのみ、compareTo メソッドはゼロを返す必要があります。

可能な修正は次のとおりです。

  • オーバーライドequals()hashCode()、メソッドが行うことと一致するようにしますcompareTo()
  • Comparatorこのクラスを作成するのではなくを使用し、Comparableそれを文書化して矛盾するequals()
  • と矛盾する自然な順序付けを行うために、このクラスを文書化してequals()ください。これは FindBugs を喜ばせることにはならないと思いますが、有効ではありますが、推奨されない可能性があります。

余談ですが、加算または減算の結果を返す場合はcompareTo()、オーバーフローが発生しないことを確認してください。

于 2013-05-23T06:42:22.103 に答える