文章参考来源:https://chenyongjun.vip/articles/107
问题case
Lombok 使用广泛,这里分享一个 Lombok @Builder 小 case,今天自己踩了坑。
@Data
@Builder
public class User {
private String name = "kitty";
private int age = 20;
private boolean enabled = true;
public static void main(String[] args) {
System.out.println(User.builder().build());
}
}
输出结果却是:User(name=null, age=0, enabled=false),自行设置的值全部失效。
原因
使用User.builder().build()方法构造对象时,如果不主动赋值的情况下会被赋初值,而不会使用我们代码中的初值。
解决方案
可以使用 @Builder.Default 标记属性,以保留默认值。
@Data
@Builder
public class User {
@Builder.Default
private String name = "kitty";
@Builder.Default
private int age = 20;
@Builder.Default
private boolean enabled = true;
public static void main(String[] args) {
System.out.println(User.builder().build());
}
}
输出结果为:User(name=kitty, age=20, enabled=true)
一般领域对象都会使用基础数据类型的包装类,很少使用基础数据类型,也很少给初始值,不容易发现。