|
Groovy Documentation | |||||||
FRAMES NO FRAMES | ||||||||
SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT |
java.lang.Object groovy.transform.Canonical
@Retention(RetentionPolicy.SOURCE) @Target({ElementType.TYPE}) @GroovyASTTransformationClass("org.codehaus.groovy.transform.CanonicalASTTransformation") public @interface Canonical
Class annotation used to assist in the creation of mutable classes.
It allows you to write classes in this shortened form:@Canonical class Customer { String first, last int age Date since Collection favItems = ['Food'] def object } def d = new Date() def anyObject = new Object() def c1 = new Customer(first:'Tom', last:'Jones', age:21, since:d, favItems:['Books', 'Games'], object: anyObject) def c2 = new Customer('Tom', 'Jones', 21, d, ['Books', 'Games'], anyObject) assert c1 == c2If you set the autoDefaults flag to true, you don't need to provide all arguments in constructors calls, in this case all properties not present are initialized to the default value, e.g.:
def c3 = new Customer(last: 'Jones', age: 21) def c4 = new Customer('Tom', 'Jones') assert null == c3.since assert 0 == c4.age assert c3.favItems == ['Food'] && c4.favItems == ['Food']The @Canonical annotation instructs the compiler to execute an AST transformation which adds positional constructors, equals, hashCode and a pretty print toString to your class. There are additional annotations if you only need some of the functionality: @EqualsAndHashCode, @ToString and @TupleConstructor. In addition, you can add one of the other annotations if you need to further customize the behavior of the AST transformation. A class created in this way has the following characteristics:
String toString() { _toString().replaceAll(/\(/, '(\n\t').replaceAll(/\)/, '\n)').replaceAll(/, /, '\n\t') }If an "underscore" version of the respective method already exists, then no default implementation is provided.
Optional Element Summary | |
---|---|
java.lang.String |
excludes
List of field and/or property names to exclude. |
java.lang.String |
includes
List of field and/or property names to include. |
Method Summary |
---|
Methods inherited from class java.lang.Object | |
---|---|
java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll() |
Element Detail |
---|
public java.lang.String[] excludes
public java.lang.String[] includes
Groovy Documentation