JAVA:记录@Builder的特性
@Builder原理:
- 在构造方法A上引用时,相当于建造一个构造器G,构造器G只可以构造A方法参数列表里的字段
- 在类上引用时,相当于给这个类一个全参构造方法,然后给这个全参构造方法加上@Builder注解
@Builder与继承:
- 子类正常,父类引用@Builder注解,会产生一个全参构造器。子类可以使用父类的构造器(只能构造父类的属性)
- 父类正常,子类引用@Builder注解,会产生一个构造器,但是该构造器只能构造子类的属性
@Builder与lombok其他注解的联动:
- @Data 方法有无参构造函数,没有全参构造函数
- @Data + @NoArgsConstructor 与单用@Data效果相同
- @Data + @AllArgsConstructor 有全参构造函数,没有无参构造函数
- @Data+@Builder 连用 方法有有参构造函数,没有无参构造函数,相当于@Data+@AllArgsConstructor+构造器
小坑:
想要在有@Data+@Builder情况下使用无参构造方法,我们一般会加上@NoArgsConstructor;
但是加上@NoArgsConstructor后,class文件不再会有全参构造函数,进而导致@Builder失效。所 以要同时加上@AllArgsConstructor和@NoArgsConstructor
2021-10-15