Lombok @Builder不适用于继承用例:
例如
class Foo{
protected int xyz1;
.....
protected String xyz7;
}
class Bar extends Foo{
}对于给定的用例,Lombok将无法生成方法来设置Foo类中定义的参数的值。
解决这个问题的方法是:
有更好的解决办法吗?
发布于 2018-08-07 14:14:42
Lombok在版本中引入了实验特性: 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();发布于 2016-04-07 17:00:09
--我把这个放在这里供参考,其他答案表明(在发布这个答案的时候),库中现在有一个@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()发布于 2018-05-03 08:16:39
目前正在研究解决这个问题的办法。查看这里的进度:https://github.com/rzwitserloot/lombok/pull/1337
https://stackoverflow.com/questions/31664098
复制相似问题