Lombok @Builderinheritance解决方法
Lombok @Builder不适用于inheritance用例:
例如
class Foo{ protected int xyz1; ..... protected String xyz7; } class Bar extends Foo{ }
对于给定的用例,Lombok将无法生成设置Foo类中定义的参数值的方法。
解决方法是:
- 手动创建Bar的构造函数。
- 在构造函数上放置Builder注释。
有更好的解决方法吗?
有点隐藏,但人们之前有过这个问题,请参阅:
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()
对于使用Builder注释的inheritance问题,Lombok引入了版本:1.18.2的实验性function,可以使用@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();
目前正在解决这个问题。 检查进度: https : //github.com/rzwitserloot/lombok/pull/1337