@Documented @Retention(value=RUNTIME) @Target(value={TYPE,CONSTRUCTOR,METHOD}) public @interface Builder
@Builder AST transformation is used to help write classes that can be created using fluent api calls.
The transform supports multiple building strategies to cover a range of cases and there are a number
of configuration options to customize the building process.
In addition, a number of annotation attributes let you customise the building process. Not all annotation attributes
are supported by all strategies. See the individual strategy documentation for more details.
If you're an AST hacker, you can also define your own strategy class.
The following strategies are bundled with Groovy:
SimpleStrategy for creating chained settersExternalStrategy where you annotate an explicit builder class while leaving some buildee class being built untouchedDefaultStrategy which creates a nested helper class for instance creationInitializerStrategy which creates a nested helper class for instance creation which when used with @CompileStatic allows type-safe object creationnew Person(firstName: "Robert", lastName: "Lewandowski", age: 21)or the with statement:
new Person().with {
firstName = "Robert"
lastName = "Lewandowski"
age = 21
}
so you might not find value in using the builder transform at all. But if you need Java integration or in some cases improved type safety, the @Builder transform might prove very useful.SimpleStrategy,
ExternalStrategy,
DefaultStrategy,
InitializerStrategy| Modifier and Type | Required Element and Description |
|---|---|
String |
builderClassName
For strategies which create a builder helper class, the class name to use for the helper class.
|
String |
builderMethodName
The method name to use for a builder factory method in the source class for easy access of the
builder helper class for strategies which create such a helper class.
|
String |
buildMethodName
For strategies which create a builder helper class that creates the instance, the method name to call to create the instance.
|
Class |
forClass
A class for which builder methods should be created
|
String |
prefix
The prefix to use when creating the setter methods.
|
| Modifier and Type | Optional Element and Description |
|---|---|
Class<? extends BuilderASTTransformation.BuilderStrategy> |
builderStrategy
A class capturing the builder strategy
|
String[] |
excludes
List of field and/or property names to exclude from generated builder methods.
|
String[] |
includes
List of field and/or property names to include within the generated builder methods.
|
public abstract Class forClass
public abstract String prefix
public abstract String builderClassName
forClass since in such cases the builder class is explicitly supplied.
Default is determined by the strategy, e.g. TargetClass + "Builder" or TargetClass + "Initializer".public abstract String buildMethodName
public abstract String builderMethodName
forClass.
Default is determined by the strategy, e.g. builder or createInitializer.public abstract Class<? extends BuilderASTTransformation.BuilderStrategy> builderStrategy
public abstract String[] excludes
public abstract String[] includes