@Target(value=TYPE) @Retention(value=SOURCE) public @interface EqualsAndHashCode
equals
and hashCode
methods inherited by all objects.
If either method already exists, then @EqualsAndHashCode
will not generate that particular method.
If they all exist, @EqualsAndHashCode
generates no methods, and emits a warning instead to highlight
that its doing nothing at all. The parameter list and return type are not relevant when deciding to skip generation of
a method; any method named hashCode
will make @EqualsAndHashCode
not generate that method,
for example.
By default, all fields that are non-static and non-transient are used in the equality check and hashCode generation.
You can exclude more fields by specifying them in the exclude
parameter. You can also explicitly specify
the fields that are to be used by specifying them in the of
parameter.
Normally, auto-generating hashCode
and equals
implementations in a subclass is a bad idea, as
the superclass also defines fields, for which equality checks/hashcodes won't be auto-generated. Therefore, a warning
is emitted when you try. Instead, you can set the callSuper
parameter to true which will call
super.equals
and super.hashCode
. Doing this with java.lang.Object
as superclass is
pointless, so, conversely, setting this flag when NOT extending something (other than Object) will also generate
a warning. Be aware that not all implementations of equals
correctly handle being called from a subclass!
Fortunately, lombok-generated equals
implementations do correctly handle it.
Array fields are handled by way of Arrays.deepEquals(Object[], Object[])
where necessary, as well
as deepHashCode
. The downside is that arrays with circular references (arrays that contain themselves,
possibly indirectly) results in calls to hashCode
and equals
throwing a
StackOverflowError
. However, the implementations for java's own ArrayList
suffer
from the same flaw.
Modifier and Type | Optional Element and Description |
---|---|
boolean |
callSuper
Call on the superclass's implementations of
equals and hashCode before calculating
for the fields in this class. |
boolean |
doNotUseGetters
Normally, if getters are available, those are called.
|
String[] |
exclude
Any fields listed here will not be taken into account in the generated
equals and hashCode implementations. |
String[] |
of
If present, explicitly lists the fields that are to be used for identity.
|
public abstract String[] exclude
equals
and hashCode
implementations.
Mutually exclusive with of()
.public abstract String[] of
Mutually exclusive with exclude()
.
public abstract boolean callSuper
equals
and hashCode
before calculating
for the fields in this class.
default: falsepublic abstract boolean doNotUseGetters
true
.
default: falseCopyright © 2009-2011 The Project Lombok Authors, licensed under the MIT licence.