java.lang.Comparable を実装しているものの、equals() をオーバーライドしていないクラスを報告します。

equals() がオーバーライドされていない場合、equals() の実装は compareTo() の実装と矛盾します。 このようなクラスのオブジェクトが java.util.SortedSet などのコレクションに追加された場合、このコレクションは equals() の項で定義されている java.util.Set の契約に違反します。

例:


  class Length implements Comparable<Length> {
    private int cm = 0;

    @Override
    public int compareTo(@NotNull Length o) {
      if (cm == o.cm) return 0;
      return cm < o.cm ? -1 : 1;
    }
  }

クイックフィックス適用後:


  class Length implements Comparable<Length> {
    private int cm = 0;

    @Override
    public int compareTo(@NotNull Length o) {
      if (cm == o.cm) return 0;
      return cm < o.cm ? -1 : 1;
    }

    @Override
    public boolean equals(Object o) {
      return o instanceof Length && compareTo((Length) o) == 0;
    }
  }