简介
Builder 使用创建者模式又叫建造者模式。简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程。@Builder注释为你的类生成相对略微复杂的构建器API。@Builder可以让你以下面显示的那样调用你的代码,来初始化你的实例对象:
User.builder().name("xiaoming").age(18).build();
但Builder注解也非常容易踩坑,下面介绍两个容易出错的坑。
属性包含默认值
@Setter
@Getter
@Builder
public class User {
private Integer age = 18;
private String name;
}
在使用Builder构造User对象的时候,默认值无效。如上面设置的age默认值为18,但使用builder构建对象的时候这个默认值无效,下面的代码会输出为null
User user = User.builder().name("xiaoming").build();
System.out.println(user.getAge()); // null
Lombok的@Builder注解在使用的,会覆盖model自己的无参数构造函数
从上图中可以看出无参数的构造方法不存在,全参数的构造方法为私有。这个时候对其序列化操作会出现异常,如下图。
此时可以通过@NoArgsConstructor @AllArgsConstructor 注解来解决