[英]Lombok @Builder inheritance workaround
Lombok @Builder 不适用于继承用例:
例如
class Foo{
protected int xyz1;
.....
protected String xyz7;
}
class Bar extends Foo{
}
对于给定的用例,Lombok 将无法生成方法来设置 Foo 类中定义的参数值。
对此的解决方法是:
有更好的解决方法吗?
Lombok 已经在 version: 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()
目前正在解决这个问题。 在此处查看进度: https : //github.com/rzwitserloot/lombok/pull/1337
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.