@Documented @Retention(value=SOURCE) @Target(value=TYPE) public @interface ImmutableBase
@Immutable
meta annotation.
Custom property handling:
@ImmutableBase
annotation supports customization using @PropertyOptions
which allows a custom property handler to be defined. This is most typically used behind the scenes
by the @Immutable
meta-annotation but you can also define your own handler. If a custom
handler is present, it will determine the code generated for the getters and setters of any property.Immutable
,
ImmutableOptions
,
MapConstructor
,
TupleConstructor
,
PropertyOptions
Modifier and Type | Optional Element and Description |
---|---|
boolean |
copyWith
If
true , this adds a method copyWith which takes a Map of
new property values and returns a new instance of the Immutable class with
these values set. |
public abstract boolean copyWith
true
, this adds a method copyWith
which takes a Map of
new property values and returns a new instance of the Immutable class with
these values set.
Example:
@groovy.transform.Immutable
(copyWith = true)
class Person {
String first, last
}
def tim = new Person( 'tim', 'yates' )
def alice = tim.copyWith( first:'alice' )
assert tim.first == 'tim'
assert alice.first == 'alice'
Unknown keys in the map are ignored, and if the values would not change
the object, then the original object is returned.
If a method called copyWith
that takes a single parameter already
exists in the class, then this setting is ignored, and no method is generated.