【Java注解系列】注解 @Builder

Lombok的@Builder注解介绍其在简化对象构建过程中的应用,通过自动生成建造者类,避免手动编写构造器和setter。类似注解如@NoArgsConstructor,@AllArgsConstructor,@Data也提及。详情可参考官方文档。

注解 @Builder

1. 注解由来:

@Builder 注解是 Lombok 提供的一种注解,用于简化构建对象的过程。通过在类上添加 @Builder 注解,可以自动生成一个建造者模式相关的代码,使得对象的构建更加简洁和易读。

2. 注解示例:

@Builder
public class Person {
    private String name;
    private int age;
    private String address;
}

在上述示例中,Person 类被标记为 @Builder 注解,Lombok 会自动生成一个内部静态类 PersonBuilder,其中包含了构建 Person 对象所需的方法。我们可以使用生成的建造者模式来创建 Person 对象,如下所示:

Person person = Person.builder()
                      .name("张三")
                      .age(25)
                      .address("北京")
                      .build();

通过使用 @Builder 注解,我们不再需要手动编写繁琐的构造器或者使用多个 setter 方法来设置属性值,而是通过链式调用建造者模式中的方法进行对象的构建。

3. 类似用法的注解:

类似的注解包括:

  • @NoArgsConstructor:自动生成无参构造方法。
  • @AllArgsConstructor:自动生成全参构造方法。
  • @Data:结合了 @Getter@Setter@ToString@EqualsAndHashCode 的功能,简化了实体类的编写。

4. 注解的英文解释:

The English explanation of @Builder annotation is “Lombok’s builder-style object construction”.

5. 注解的官方链接:

在 Lombok 的官方文档中查看 @Builder 注解的详细说明

<think>我们正在讨论Java中的@Builder注解,根据引用资料,我们可以总结如下:@Builder注解是Lombok库提供的注解之一,用于自动生成建造者模式的代码。它的主要作用是简化对象的创建过程,特别是当对象有很多可选参数时。作用:1.自动生成一个静态内部类Builder,并为原始类中的每个非静态字段生成对应的setter方法(在Builder类中)。2.提供一种流畅的API(链式调用)来设置对象属性。3.避免编写多个构造器或大量的setter方法,使代码更简洁。用法:1.在类上使用@Builder注解,会为这个类生成一个包含所有字段的建造者。2.可以通过`类名.builder()`获取Builder实例,然后链式调用属性设置方法,最后调用`build()`方法创建对象。示例(根据引用[1]):```javaimportlombok.Builder;importlombok.ToString;@Builder@ToStringpublicclassPerson{privateStringfirstName;privateStringlastName;privateintage;publicstaticvoidmain(String[]args){Personperson=Person.builder().firstName("John").lastName("Doe").age(30).build();System.out.println(person);}}```在这个例子中,我们不需要自己编写Builder类,Lombok会自动生成。我们通过`Person.builder()`开始,然后链式设置属性,最后调用`build()`得到Person对象。注意事项(根据引用[4]和[5]):-使用了@Builder注解的类必须具有一个无参的构造函数(如果没有其他构造函数,Lombok会生成,但如果有带参构造则需要自己处理)。-@Builder也可以用在方法上(比如为某个复杂的构造过程提供建造者),但通常用在类上。另外,引用[2]和[3]也提供了类似的用法示例。相关问题:1.@Builder注解在继承中如何使用?2.如何自定义@Builder注解生成的方法名称?3.@Builder注解与构造函数注入的方式相比有什么优缺点?4.在Spring框架中如何使用@Builder注解?5.如何在使用@Builder时设置默认值?</think>### Java @Builder 注解详解 #### 一、核心作用 @Builder 是 Lombok 库提供的注解,用于**自动生成建造者模式**代码: 1. **简化对象创建**:通过链式调用设置属性值 2. **避免构造器污染**:解决多参数构造器可读性差的问题 3. **提升代码可维护性**:自动生成 Builder 类,减少样板代码 4. **支持默认值**:可为属性设置初始值(需结合 `@Builder.Default`) 5. **线程安全**:每个构建过程独立创建新对象[^5] #### 二、使用方式 ##### 1. 基础用法(类级别) ```java import lombok.Builder; @Builder public class User { private Long id; private String username; private String email; } // 使用示例 User user = User.builder() .id(1L) .username("john_doe") .email("john@example.com") .build(); ``` ##### 2. 方法级别(自定义构建) ```java public class Order { private String id; @Builder public static Order createOrder(String orderId) { Order order = new Order(); order.id = "ORDER_" + orderId; return order; } } // 调用方式 Order order = Order.createOrderBuilder().orderId("123").build(); ``` ##### 3. 设置默认值 ```java @Builder public class Config { @Builder.Default private int timeout = 30; // 默认值30 @Builder.Default private String mode = "production"; } ``` #### 三、实现原理 Lombok 在编译期自动生成以下代码: 1. 静态内部类 `Builder`,包含与原类相同的属性 2. 链式 setter 方法(返回 Builder 自身) 3. `build()` 方法构造最终对象 4. `builder()` 静态入口方法[^4][^5] ```mermaid classDiagram class User { -Long id -String username -String email +builder() Builder } class UserBuilder { -Long id -String username -String email +id(Long id) UserBuilder +username(String username) UserBuilder +email(String email) UserBuilder +build() User } User ..> UserBuilder : 生成 ``` #### 四、适用场景 1. **复杂对象创建**:需要设置多个属性的对象 2. **可选参数场景**:部分属性需要缺省值 3. **不可变对象**:结合 `@Value` 创建线程安全对象 4. **DTO 对象构建**:API 数据传输对象[^3] #### 五、注意事项 1. **构造器冲突**:若自定义了构造器,需添加 `@AllArgsConstructor` 2. **继承限制**:父类字段不会自动包含在 Builder 中(需用 `@SuperBuilder`) 3. **集合初始化**:集合属性需手动初始化(避免 NPE) 4. **Jackson 序列化**:需配合 `@JsonDeserialize(builder=类名.Builder.class)`[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值