一般在构造一个javaBean对象时,有三种写法:
1、直接通过构造函数传参的方式设置属性,但属性过多的话会让构造函数十分臃肿,而且不能灵活的选择只设置某些参数。
2、采用重叠构造器模式,先写第一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个构造器有两个可选参数,以此类推;如果参数比较多时,类里面会出现一堆构造方法,容易出错。
3、采用Javabean的写法,写一堆属性的setter方法,通过调用setter方法给属性赋值。 这种方法有个劣势就是构造的过程被分到几个调用中,在构造中可能处于不一致状态,无法保证一致性。
而Lombok 插件中的@Builer,可以放在类、构造函数或方法上,它可以帮我们快速实现一个builder模式,builder模式既解决了重叠构造器容易出错,也解决了Javabean的不一致问题,例子如下:
但当实体对象有继承关系的时候,再使用Builder注解就会发现,在子类中无法通过builder方法构造父类中的成员变量。Builder注解只管承接注解的这个类,而不会管他的父类或者子类。这个问题在lombokv1.18.2 版本之前其实很难办,但是在这个版本官方引入了一个新的注解@SuperBuilder,无法build父类的问题迎刃而解.
查阅官方文档发现,若想使用build方法,只需要在子类和父类上都加@SuperBuilder。