私はLombok @Builder
アノテーションを使用していますが、String
フィールドの一部をオプションにして、NPEを回避するために""
をデフォルトにしたいです。これを行う簡単な方法はありますか?何も見つかりません。
または、変数が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"
。
もう1つの方法は、@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();
受け入れられる回答 に関して、このアプローチはクラス名の変更にあまり敏感ではありません。 XYZ
の名前を変更したが、内部静的クラスXYZBuilder
の名前を忘れた場合、魔法はなくなりました。
もっと好きな方法を使うかどうかはあなた次第です。