Lombok @Builderは、継承のユースケースでは機能しません。
例えば
class Foo{
protected int xyz1;
.....
protected String xyz7;
}
class Bar extends Foo{
}
特定のユースケースでは、LombokはFooクラスで定義されたパラメーターの値を設定するメソッドを生成できません。
これの回避策は次のとおりです。
より良い回避策はありますか?
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();
それは少し隠されていますが、人々は以前にこの質問をしました、参照してください:
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()
他の回答が現在(この回答が投稿された時点ではありません)、ライブラリでより適切に見える@SuperBuilder機能が利用可能であることを示しているため、これは参照用にここに残します。
現在、この問題の解決策が検討されています。ここで進行状況を確認してください: https://github.com/rzwitserloot/lombok/pull/1337