@Builder踩坑学习<未完待续>

51 阅读1分钟

前情提要

在开发过程中,我们经常使用Lombok @Builder来通过建造者模式构造对象,看着也更简洁。 加上Student.class带上了@Builder注解

Student s1 = Student.builder().name("张三").age(18).build();

但是在序列化和反序列化过程中,Student会转换失败。 异常原因就是Student没有空参构造器。

因为当使用@Builder之后,就默认不会有空参构造器。

使用@Builder后会发生什么

  1. 默认不带有空参和全参构造器,如果需要必须同时使用@AllConstructor和@NoConstructor
  2. 给对象设置默认值时失效
    private String sex = "male";
    
    解决方案:@Builder.Default
    @Builder.Default
    private String sex = "male";
    
  3. 无法构建父类属性,解决方案: 使用@SuperBuilder

总结

目前就想到这么多,以后还有再来补充。但是实际上,我的对于@Builder的使用是不规范的。在@Builder后加上@NoConstructor会报错,这说明本来@Builder就不是和空参构造器一起使用的,它更使用与一些长期不变的实体类。