@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.