lombok中的@Builder

在上述示例中,@Builder 注解应用在 Person 类上,通过链式调用的方式创建 Person 对象。使用 builder() 方法返回一个生成器对象,然后可以通过链式调用的方式设置对象的属性。最后使用 build() 方法构建最终的对象。

使用 @Builder 注解可以避免手动编写繁琐的构造函数和设置属性的方法,提供了一种更简洁的方式来创建对象,并且可以设置默认值、可选属性等。

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

    public static void main(String[] args) {
        Person person = Person.builder()
                .name("John")
                .age(25)
                .address("123 Main St")
                .build();

        System.out.println(person.getName());     // 输出: John
        System.out.println(person.getAge());      // 输出: 25
        System.out.println(person.getAddress());  // 输出: 123 Main St
    }
}

在上述示例中,@Builder注解应用在 Person 类上,通过链式调用的方式创建 Person 对象。使用 builder() 方法返回一个生成器对象,然后可以通过链式调用的方式设置对象的属性。最后使用 build() 方法构建最终的对象。
使用 @Builder 注解可以避免手动编写繁琐的构造函数和设置属性的方法,提供了一种更简洁的方式来创建对象,并且可以设置默认值、可选属性等。

上方@Builder展开后大致为

public class User {

  private String name;
  private int age;
  private String address;


  // 构造方法私有化,不然客户端可以直接调用构造方法了
  private User(String name, int age, String address) {
    this.name = name;
    this.age = age;
    this.address = address;
  }

  // 静态方法,用于生成一个 Builder
  public static UserBuilder builder(){
    return new UserBuilder();
  }

  // 建造者类(静态内部类):保持参数和外部类一致
  public static class UserBuilder{
    private String name;
    private int age;
    private String address;

    private UserBuilder(){
    }

    public UserBuilder name(String name){
      this.name = name;
      return this;
    }

    public UserBuilder age(int age){
      this.age = age;
      return this;
    }

    public UserBuilder address(String address){
      this.address = address;
      return this;
    }

    public User build(){
      // 可以在其中做些校验
      if (name == null || address == null) {
        throw new RuntimeException("名称和地址不能为空");
      }
      if (age < 0 || age >= 130) {
        throw new RuntimeException("年龄不合法");
      }
      return new User(name, age, address);
    }
  }

  public static void main(String[] args) {
    User user = User.builder()
        .name("Ricard")
        .age(18)
        .address("chengdu")
        .build();
    System.out.println(user.name);
  }
}

推荐设计模式文章:https://juejin.cn/post/6844903695667167240

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值