Lombok @Builderinheritance解决方法

Lombok @Builder不适用于inheritance用例:

例如

class Foo{ protected int xyz1; ..... protected String xyz7; } class Bar extends Foo{ } 

对于给定的用例,Lombok将无法生成设置Foo类中定义的参数值的方法。

解决方法是:

  1. 手动创建Bar的构造函数。
  2. 在构造函数上放置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