1. ホーム
  2. java

[解決済み] Lombokの@Builderで必要な引数

2023-05-18 23:04:13

質問

もし私が を追加すると をクラスに追加します。 builderメソッドが作成される。

Person.builder().name("john").surname("Smith").build();

特定のフィールドが必須であるような要件があります。 この場合、nameフィールドは必須ですが、surnameは必須ではありません。理想的には、このように宣言したいと思います。

Person.builder("john").surname("Smith").build()

これをどうすればいいのかがわかりません。 コンストラクタに@Builderを追加してみましたが、うまくいきませんでした。

@Builder
public Person(String name) {
    this.name = name;
}

どのように解決するのですか?

Lombokのアノテーション設定により、簡単に行うことができます。

import lombok.Builder;
import lombok.ToString;

@Builder(builderMethodName = "hiddenBuilder")
@ToString
public class Person {

    private String name;
    private String surname;

    public static PersonBuilder builder(String name) {
        return hiddenBuilder().name(name);
    }
}

そして、このように使う

Person p = Person.builder("Name").surname("Surname").build();
System.out.println(p);

もちろん @ToString はここでは省略可能です。