注解类型 Builder
builder 注解为被注解的类或包含使用
@Builder
注解的成员的类创建所谓的“builder”方面。如果成员被注解,它必须是构造函数或方法。如果类被注解,则会生成一个包私有构造函数,其中所有字段都作为参数(就好像类上存在 @AllArgsConstructor(access = AccessLevel.PACKAGE)
一样),并且就好像此构造函数已使用 @Builder
注解一样。请注意,仅当您没有编写任何构造函数并且也没有添加任何显式的 @XArgsConstructor
注解时,才会生成此构造函数。在这些情况下,lombok 将假定存在一个 all-args 构造函数并生成使用它的代码;这意味着如果此构造函数不存在,您将收到编译器错误。
@Builder
的效果是生成一个名为 TBuilder
的内部类,其中包含一个私有构造函数。TBuilder
的实例是通过名为 builder()
的方法创建的,该方法也在类本身中为您生成(而不是在 builder 类中)。
TBuilder
类为注解的构造函数/方法(在注解类时为每个字段)的每个参数包含 1 个方法,该方法返回 builder 本身。builder 还有一个 build()
方法,该方法返回原始类型的已完成实例,该实例是通过将通过 builder 中的各种其他方法设置的所有参数传递给使用 @Builder
注解的构造函数或方法来创建的。此方法的返回类型将与相关类相同,除非方法已被注解,在这种情况下,它将等于该方法的返回类型。
完整文档请见 @Builder 的 project lombok 功能页面。
之前
@Builder class Example<T> { private T foo; private final String bar; }之后
class Example<T> { private T foo; private final String bar; private Example(T foo, String bar) { this.foo = foo; this.bar = bar; } public static <T> ExampleBuilder<T> builder() { return new ExampleBuilder<T>(); } public static class ExampleBuilder<T> { private T foo; private String bar; private ExampleBuilder() {} public ExampleBuilder foo(T foo) { this.foo = foo; return this; } public ExampleBuilder bar(String bar) { this.bar = bar; return this; } @java.lang.Override public String toString() { return "ExampleBuilder(foo = " + foo + ", bar = " + bar + ")"; } public Example build() { return new Example(foo, bar); } } }
- 另请参阅
-
嵌套类概要
嵌套类修饰符和类型类描述static @interface
使用@Default
注解的字段必须具有初始化表达式;如果未在构建期间显式设置,则该表达式将用作默认值。static @interface
放在字段上(在类型上使用@Builder
的情况下)或参数上(在构造函数或静态方法上使用@Builder
的情况下)以指示 lombok 应如何给定实例获取此字段或参数的值;这仅在toBuilder
为true
时相关。 -
可选元素概要
可选元素修饰符和类型可选元素描述设置生成的 builder 类的访问级别。builder 类的名称。预先添加到生成的 builder 类中 'set' 方法的前缀。boolean
如果为 true,则生成一个实例方法以获取使用此实例的值初始化的 builder。
-
元素详情
-
builderMethodName
String builderMethodName- 返回
- 创建新的 builder 实例的方法的名称。默认值:
builder
。如果为空字符串,则禁止生成builder
方法。
- 默认
"builder"
-
buildMethodName
-
builderClassName
String builderClassNamebuilder 类的名称。类型和构造函数上@Builder
的默认值:请参阅 configkeylombok.builder.className
,如果未设置,则默认为(TypeName)Builder
。方法上
@Builder
的默认值:请参阅 configkeylombok.builder.className
,如果未设置,则默认为(ReturnTypeName)Builder
。- 返回
- 将生成的 builder 类的名称(或者如果已存在,将填充 builder 元素)。
- 默认
""
-
toBuilder
boolean toBuilder如果为 true,则生成一个实例方法以获取使用此实例的值初始化的 builder。仅当@Builder
用于构造函数、类型本身或返回声明类型实例的静态方法时才合法。- 返回
- 是否生成
toBuilder()
方法。
- 默认
false
-
access
AccessLevel access设置生成的 builder 类的访问级别。默认情况下,生成的 builder 类是public
。注意:如果您编写自己的 builder 类,这将不起作用(我们不会更改其访问级别)。- 返回
- builder 类将使用此访问修饰符生成。
- 默认
PUBLIC
-
setterPrefix
String setterPrefix预先添加到生成的 builder 类中 'set' 方法的前缀。默认情况下,生成的方法不包含前缀。例如,通常生成为someField(String someField)
的方法在使用@Builder(setterPrefix = "with")
时将改为生成为withSomeField(String someField)
。请注意,强烈建议不要使用 "with" 作为 builder setter 方法的前缀,因为 "with" 通常表示不可变数据结构,而 builder 根据定义是可变对象。对于@Singular
字段,生成的方法称为withName
、withNames
和clearNames
,而不是默认的name
、names
和clearNames
。- 返回
- 预先添加到生成的方法名称的前缀。
- 默认
""
-