@Target(value=TYPE) @Retention(value=SOURCE) public @interface SuperBuilder
@SuperBuilder
, but which works well when extending.
It is similar to @Builder
, except it is only legal on types, is less configurable, but allows you to extends
other builder-able classes.
All classes in the hierarchy must be annotated with @SuperBuilder
.
Lombok generates 2 inner 'builder' classes, which extend the parent class' builder class (unless your class doesn't have an extends clause).
Lombok also generates a static method named builder()
, and a protected constructor that takes 1 argument of the builderclass type.
The TBuilder
class contains 1 method for each parameter of the annotated
constructor / method (each field, when annotating a class), which returns the builder itself.
The builder also has a build()
method which returns a completed instance of the original type.
Complete documentation is found at the project lombok features page for @SuperBuilder.
Singular
Modifier and Type | Optional Element and Description |
---|---|
String |
builderMethodName |
String |
buildMethodName |
String |
setterPrefix
Prefix to prepend to 'set' methods in the generated builder class.
|
boolean |
toBuilder
If
true , generate an instance method to obtain a builder that is initialized with the values of this instance. |
public abstract String builderMethodName
builder
. If the empty string, suppress generating the builder
method.public abstract String buildMethodName
@Builder
-annotated class.public abstract boolean toBuilder
true
, generate an instance method to obtain a builder that is initialized with the values of this instance.
In this case, all superclasses must also have toBuilder=true
.toBuilder()
method.public abstract String setterPrefix
someField(String someField)
would instead be
generated as withSomeField(String someField)
if using @SuperBuilder(setterPrefix = "with")
.
Note that using "with" to prefix builder setter methods is strongly discouraged as "with" normally
suggests immutable data structures, and builders by definition are mutable objects.
For @Singular
fields, the generated methods are called withName
, withNames
, and clearNames
, instead of
the default name
, names
, and clearNames
.
This prefix only applies to the 'set' methods for the fields of the annotated class.
For consistency reasons, you should use the same prefix on all superclasses and subclasses that use @SuperBuilder
.Copyright © 2024. All rights reserved.