注解类型 Builder


@Target({TYPE,METHOD,CONSTRUCTOR}) @Retention(SOURCE) public @interface 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 应如何给定实例获取此字段或参数的值;这仅在 toBuildertrue 时相关。
  • 可选元素概要

    可选元素
    修饰符和类型
    可选元素
    描述
    设置生成的 builder 类的访问级别。
    builder 类的名称。
     
     
    预先添加到生成的 builder 类中 'set' 方法的前缀。
    boolean
    如果为 true,则生成一个实例方法以获取使用此实例的值初始化的 builder。
  • 元素详情

    • builderMethodName

      String builderMethodName
      返回
      创建新的 builder 实例的方法的名称。默认值:builder。如果为空字符串,则禁止生成 builder 方法。
      默认
      "builder"
    • buildMethodName

      String buildMethodName
      返回
      builder 类中创建您的 @Builder 注解类的实例的方法的名称。
      默认
      "build"
    • builderClassName

      String builderClassName
      builder 类的名称。类型和构造函数上 @Builder 的默认值:请参阅 configkey lombok.builder.className,如果未设置,则默认为 (TypeName)Builder

      方法上 @Builder 的默认值:请参阅 configkey lombok.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 字段,生成的方法称为 withNamewithNamesclearNames,而不是默认的 namenamesclearNames
      返回
      预先添加到生成的方法名称的前缀。
      默认
      ""