8

リストされたメソッドに対して何をする必要があるのか​​ 疑問に思う

 public final int compareTo(final FieldDTO o) {
        return o.available.compareTo(this.available);

行 2 で例外をスローし、Bad practice - Class defines compareTo(...) and uses Object.equals() 16 日
フィールドは compareTo(FieldDTO) を定義し、Object.equals() を使用します。

これをどのように処理すればよいかわかりません。前もって感謝します。

4

3 に答える 3

7

これはFindBugsのドキュメントです:

Eq: クラスは compareTo(...) を定義し、Object.equals() を使用します (EQ_COMPARETO_USE_OBJECT_EQUALS)

このクラスは compareTo(...) メソッドを定義しますが、その equals() メソッドを java.lang.Object から継承します。一般に、equals が true を返す場合に限り、compareTo の値は 0 を返す必要があります。これに違反すると、PriorityQueue などのクラスで奇妙で予測不可能な障害が発生します。Java 5 では PriorityQueue.remove メソッドは compareTo メソッドを使用しますが、Java 6 では equals メソッドを使用します。

Comparable インターフェースの compareTo メソッドの JavaDoc から:

(x.compareTo(y)==0) == (x.equals(y)) にすることを強くお勧めしますが、厳密には必須ではありません。一般的に言えば、 Comparable インターフェースを実装し、この条件に違反するクラスは、この事実を明確に示す必要があります。推奨される言語は、「注: このクラスには、equals と矛盾する自然な順序付けがあります。」

equalsしたがって、メソッドを実装して、デフォルトの実装をオーバーライドする必要があるようですObject

于 2013-05-22T20:32:59.120 に答える