org.sonar.l10n.java.rules.squid.S1201.html Maven / Gradle / Ivy
"equals" as a method name should be used exclusively to override Object.equals(Object)
to prevent any confusion.
It is tempting to overload the method to take a specific class instead of Object
as parameter, to save the class comparison check. However, this will not work as expected.
Noncompliant Code Example
class MyClass {
private int foo = 1;
public boolean equals(MyClass o) { // Noncompliant - "equals" method which does not override Object.equals(Object)
return o != null && o.foo == this.foo;
}
public static void main(String[] args) {
MyClass o1 = new MyClass();
Object o2 = new MyClass();
System.out.println(o1.equals(o2)); // Will display "false" because "o2" is of type "Object" and not "MyClass"
}
}
Compliant Solution
class MyClass {
private int foo = 1;
@Override
public boolean equals(Object o) { // Compliant - overrides Object.equals(Object)
if (o == null || !(o instanceof MyClass)) {
return false;
}
MyClass other = (MyClass)o;
return this.foo == other.foo;
}
/* ... */
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy