Java
'Comparable' implemented but 'equals()' not overridden
Warning
New
Last modified: 03 December 2024 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;
}
}
- By ID
Can be used to locate inspection in e.g. Qodana configuration files, where you can quickly enable or disable it, or adjust its settings.
ComparableImplementedButEqualsNotOverridden
Inspection Details | |
---|---|
By default bundled with: | |
Can be installed with plugin: | Java, 243.23126 |
Thanks for your feedback!
Was this page helpful?