Lombok @Builder不适用于继承用例:
例如
class Foo{
protected int xyz1;
.....
protected String xyz7;
}
class Bar extends Foo{
}
Run Code Online (Sandbox Code Playgroud)
对于给定的用例,Lombok将无法生成设置Foo类中定义的参数值的方法.
解决方法是:
有更好的解决方法吗?
Ana*_*ika 16
Lombok针对Builder注释面临的继承问题引入了版本:1.18.2的实验性功能,可以使用@SuperBuilder注释解决如下.
@SuperBuilder
public class ParentClass {
private final String a;
private final String b;
}
@SuperBuilder
public class ChildClass extends ParentClass{
private final String c;
}
Run Code Online (Sandbox Code Playgroud)
现在,可以使用如下的Builder类(使用@Builder注释无法实现)
ChildClass.builder().a("testA").b("testB").c("testC").build();
Run Code Online (Sandbox Code Playgroud)
fd8*_*8s0 10
有点隐藏,但人们之前有过这个问题,请参阅:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
可以让你使用
Child.builder().a("testA").b("testB").build()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20029 次 |
| 最近记录: |