'Comparable' implemented but 'equals()' not overridden
Reports classes that implement java.lang.Comparable
but do not override equals()
.
If equals()
is not overridden, the equals()
implementation is not consistent with the compareTo()
implementation. If an object of such a class is added to a collection such as java.util.SortedSet
, this collection will violate the contract of java.util.Set
, which is defined in terms of equals()
.
Example:
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;
}
}
After the quick fix is applied:
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;
}
}
Inspection Details | |
---|---|
Available in: | IntelliJ IDEA 2023.3, Qodana for JVM 2023.3 |
Plugin: | Java, 233.SNAPSHOT |
Last modified: 13 July 2023