From 5fcb9284c13e58750ec6c36a1eae5869a5a52925 Mon Sep 17 00:00:00 2001
From: Reinier Zwitserloot canEqual
if you change equals
and hashCode
.
-
+ NEW in Lombok 1.14.0: To put annotations on the other
parameter of the equals
(and, if relevant, canEqual
) method, you can use onParam=@__({@AnnotationsHere})
. Be careful though! This is an experimental feature. For more details see the documentation on the onX feature.
+
- onX was introduced as experimental feature in lombok v0.11.7 (edge release only). + onX was introduced as experimental feature in lombok v0.11.8.
@AllArgsConstructor
, @NoArgsConstructor
, and @RequiredArgsConstructor
support the onConstructor
option which will put the listed annotations on the generated constructor.
- @Setter
and @Wither
support onParam
in addition to onMethod
; annotations listed will be put on the only parameter that the generated method has.
+ @Setter
and @Wither
support onParam
in addition to onMethod
; annotations listed will be put on the only parameter that the generated method has. @EqualsAndHashCode
also supports onParam
; the listed annotation(s) will be placed on the single parameter of the generated equals
method, as well as any generated canEqual
method.
The syntax is a little strange; to use any of the 3 onX
features, you must wrap the annotations to be applied to the constructor / method / parameter in @__(@AnnotationGoesHere)
. To apply multiple annotations, use @__({@Annotation1, @Annotation2})
. The annotations can themselves obviously have parameters as well.
- The reason of the weird syntax is to make this feature work in javac 7 compilers; the @__
type is an annotation reference to the annotation type _
(underscore) which doesn't actually exist; this makes javac 7 delay aborting the compilation process due to an error because it is possible an annotation processor will later create the _
type. Instead, lombok applies the annotations and removes the references so that the error will never actually occur. The point is: The _
type must not exist, otherwise the feature does not work. In the rare case that the _
type does exist (and is imported or in the package), you can simply add more underscores. Technically any non-existent type would work, but to maintain consistency and readability and catch erroneous use, lombok considers it an error if the 'wrapper' annotation is anything but a series of underscores.
+ The reason of the weird syntax is to make this feature work in javac 7 compilers; the @__
type is an annotation reference to the annotation type __
(double underscore) which doesn't actually exist; this makes javac 7 delay aborting the compilation process due to an error because it is possible an annotation processor will later create the __
type. Instead, lombok applies the annotations and removes the references so that the error will never actually occur. The point is: The __
type must not exist, otherwise the feature does not work. In the rare case that the __
type does exist (and is imported or in the package), you can simply add more underscores. Technically any non-existent type would work, but to maintain consistency and readability and catch erroneous use, lombok considers it an error if the 'wrapper' annotation is anything but a series of underscores.
To reiterate: This feature can disappear at any time; if you use this feature, be prepared to adjust your code when we find a nicer way of implementing this feature, or, if a future version of javac forces us to remove this feature entirely with no alternative.
-- cgit