龙目岛@Builder继承解决方法
龙目岛@Builder不适用于继承用例:
例如
class Foo{
protected int xyz1;
.....
protected String xyz7;
}
class Bar extends Foo{
}
对于给定的用例,龙目岛将无法生成方法来设置在Foo类中定义的参数值。
此问题的解决方法是:
- 手动创建柱的构造函数。
- 将生成器批注放在该构造函数上。
有没有更好的解决方法?
龙目岛@Builder不适用于继承用例:
例如
class Foo{
protected int xyz1;
.....
protected String xyz7;
}
class Bar extends Foo{
}
对于给定的用例,龙目岛将无法生成方法来设置在Foo类中定义的参数值。
此问题的解决方法是:
有没有更好的解决方法?
龙目岛在版本1.18.2中引入了实验性功能,用于解决Builder注释面临的继承问题,并且可以通过@SuperBuilder注释解决,如下所示。
@SuperBuilder
public class ParentClass {
private final String a;
private final String b;
}
@SuperBuilder
public class ChildClass extends ParentClass{
private final String c;
}
现在,可以使用如下所示的Builder类(这在@Builder注释中是不可能的)
ChildClass.builder().a("testA").b("testB").c("testC").build();
我把它留在这里供参考,因为其他答案表明现在(不是在这个答案发布时)库中现在有一个@SuperBuilder功能,似乎更合适。
它有点隐藏,但人们以前有过这个问题,请参阅:
https://reinhard.codes/2015/09/16/lomboks-builder-annotation-and-inheritance/
总结博客文章
@AllArgsConstructor
public class Parent {
private String a;
}
public class Child extends Parent {
private String b;
@Builder
private Child(String a, String b){
super(a);
this.b = b;
}
}
将允许您使用
Child.builder().a("testA").b("testB").build()