web-dev-qa-db-ja.com

ロンボク語の@Builderまたは@Getterアノテーションを使用したデフォルトのフィールド値

私はLombok @Builderアノテーションを使用していますが、Stringフィールドの一部をオプションにして、NPEを回避するために""をデフォルトにしたいです。これを行う簡単な方法はありますか?何も見つかりません。

または、変数がnullの場合に@Getterをカスタマイズしてデフォルト値を返す方法。

11
Hazel Troost

バージョン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にします。

8
JafarKhQ

以下のようなビルダークラスを提供する必要があります。

@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";
    }
}

次に、xyzのデフォルト値は"X""Y""Z"

4
ntalbs

もう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の名前を忘れた場合、魔法はなくなりました。

もっと好きな方法を使うかどうかはあなた次第です。

3
JeanValjean