问题1:@Data 和 @Builder 致使无参构造丢失

现象

  • 单独使用 @Data 注解,是会生成无参数构造方法。
  • 单独使用 @Builder 注解,发现生成了全属性的构造方法。
  • @Data @Builder 一块儿用:咱们发现没有了默认的构造方法。若是手动添加无参数构造方法或。用 @NoArgsConstructor 注解都会报错!

两种解决方法

1. 构造方法加上 @Tolerate 注解,让 lombok 伪装它不存在(不感知)

  1. @Builder
  2. @Data
  3. public class TestLombok {
  4. @Tolerate
  5. TestLombok() {
  6. }
  7. ......
  8. }

2. 直接加上这 4 个注解

  1. @Data
  2. @Builder
  3. @NoArgsConstructor
  4. @AllArgsConstructor
  5. public class TestLombok {
  6. ......
  7. }

问题2:@Builder 注解致使默认值无效

现象

使用 Lombok 注解能够极高的简化代码量,比较好用的注解除了 @Data 以外,还有 @Builder 这个注解,它可让你很方便的使用 builder 模式构建对象,可是今天发现 @Builder 注解会把对象的默认值清掉。

  1. @Data
  2. @Builder
  3. @NoArgsConstructor
  4. @AllArgsConstructor
  5. public class TestLombok {
  6. private String aa = "zzzz";
  7. public static void main(String[] args) {
  8. TestLombok build = TestLombok.builder().build();
  9. System.out.println(build);
  10. }

输出:TestLombok(aa=null)