Lombok @Builder
注釈を使用していますが、String
フィールドの一部をオプションにしたい場合は、デフォルトで""
にしてください。これを行う簡単な方法はありますか?私は何も見つけることができません。Lombokで@Builderまたは@Getterアノテーションを使用するデフォルトのフィールド値
null
の場合は、@Getter
をデフォルト値に戻すようにカスタマイズすることもできます。
Lombok @Builder
注釈を使用していますが、String
フィールドの一部をオプションにしたい場合は、デフォルトで""
にしてください。これを行う簡単な方法はありますか?私は何も見つけることができません。Lombokで@Builderまたは@Getterアノテーションを使用するデフォルトのフィールド値
null
の場合は、@Getter
をデフォルト値に戻すようにカスタマイズすることもできます。
v1.16.16
からは、@Builder.Default
が追加されました。
@Builder.Default
あなたのフィールド@Builder
を使用するためのデフォルト値を設定できます。
例:
@Setter
@Getter
@Builder
public class MyData {
private Long id;
private String name;
@Builder.Default
private Status status = Status.NEW;
}
がPS:彼らはまた、あなたが@Builder.Default
を使用しなかった場合に警告を追加いいこと。
警告:(35,22)java:@Builderは、 式の初期化を完全に無視します。初期化式をデフォルトで とする場合は、@ Builder.Defaultを追加します。構築中に を設定できない場合は、フィールドをfinalにしてください。
あなたは以下のようなビルダークラスを提供する必要があります。
@Builder
public class XYZ {
private String x;
private String y;
private String z;
private static class XYZBuilder {
private String x = "X";
private String y = "Y";
private String z = "Z";
}
}
その後x
、y
、z
のデフォルト値は"X"
、"Y"
、"Z"
になります。どこへ行く
もう一つの方法は、@Builder(toBuilder = true)
@Builder(toBuilder = true)
public class XYZ {
private String x = "X";
private String y = "Y";
private String z = "Z";
}
を使用することであり、次のように、あなたはそれを使用する:
new XYZ().toBuilder().build();
accepted answerに関しては、このアプローチは、クラスの名前を変更するにはあまり賢明です。 XYZ
の名前を変更しても、内部静的クラスXYZBuilder
の名前を忘れた場合、魔法は消えてしまいます!
もっと好きな方法を使用するのはあなた次第です。
あなたは 'new XYZ()'の中の '()'を忘れてしまいました。 –
@HazelTroost fixed – JeanValjean
それは全くいいことではありません! '@ Default.Builder' **と**' NoArgsConstructor'を使うと(私は理解できませんが**時にはいくつかのフレームワークのため** ** argsコンストラクタを提供してはいけません)、初期化子**デフォルトのコンストラクタで**使用されていません!これは深刻なバグです。 –
はい、私はあなたに同意します。ロンボクで生成されたコードの設計はあまりいいものではありません(生成されたクラスをチェックするのは良い考えです)。 1つの回避策は、引数なしコンストラクタを自分で書くことです。 – JafarKhQ