一、有两种方式:
1、使用@SuperBuilder注解
2、使用@Builder(toBuilder = true)注解
二、使用方式:
方式一:
子类:
@Getter
@Setter
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class A extendsB {
private String mobilePhone;
public A(Integer age,String name) {
super(age,name);
this.mobilePhone = mobilePhone;
}
}
父类:
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class B {
private Integer age;
private String name;
}
调用:
public static void main(String[] args) {
A build = A.builder().mobilePhone("-").age(0).name("a").build();
}
方法二:
与方法一不同的是,构造函数使用@Builder(toBuilder = true)注解的方式
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public classA extends B {
private String mobilePhone;
@Builder(toBuilder = true)
public A(Integer age,String name,String mobilePhone) {
super(age,name);
this.mobilePhone = mobilePhone;
}
}
补充:
1、使用了@Builder之后,需要添加@NoArgsConstructor,因为@Builder会覆盖调无参构造器;
2、使用了@Builder之后,还需要注意设置成员属性不生效,需要通过@Builder.Default添加到属性上边;
3、@Builder并不支持对基类属性的构造,而 @SuperBuilder 就是为了解决这个问题而产生的,算是@Builder的升级版;