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;
}
}