By contract, the equals(Object)
method, from java.lang.Object
, should accept a null
argument. Among all the
other cases, the null
case is even explicitly detailed in the Object.equals(...)
Javadoc, stating "_For any non-null
reference value x, x.equals(null) should return false._"
Assuming that the argument to equals
is always non-null, and enforcing that assumption with an annotation is not only a fundamental
violation of the contract of equals
, but it is also likely to cause problems in the future as the use of the class evolves over time.
The rule raises an issue when the equals
method is overridden and its parameter annotated with any kind of @Nonnull
annotation.
public boolean equals(@javax.annotation.Nonnull Object obj) { // Noncompliant // ... }
public boolean equals(Object obj) { if (obj == null) { return false; } // ... }