Java / Lombok Interview questions
How does @EqualsAndHashCode handle inheritance by default?
By default, @EqualsAndHashCode does not call the superclass's equals/
hashCode — it only considers the fields declared in the annotated class itself, which can
silently produce incorrect equality if a subclass has meaningful fields inherited from a parent class that
should also factor into equality.
@EqualsAndHashCode(callSuper = true) public class Employee extends Person { private String department; // now includes Person's fields (via Person's equals/hashCode) AND department }
Setting callSuper = true makes the generated method also invoke the superclass's
equals/hashCode and factor that result in, which is usually what you want once
there's a real inheritance hierarchy with meaningful parent-class state. Lombok will actually emit a compiler
warning if you extend a class and don't specify callSuper explicitly, precisely because getting
this wrong is a common, easy-to-miss bug.
More Related questions...