追記(2017/9/10)
v1.16.16から@Builder.Default
アノテーションを付与することでデフォルト値を指定できるようになりました。
@Builder
public class Coupon {
@Builder.Default
private UUID id = UUID.randomUUID();
private String name;
private String description;
private ZonedDateTime expireDate;
}
ちなみに、Spring Bootではv1.5.3で取り込まれたので、それ以前のものを使っている場合は、明示的にバージョンを指定する必要があります。
概要
Lombokの@Builderは、指定したクラスにbuilderクラスを自動生成するアノテーションである。
@Value
@Builder
public class Coupon {
private UUID id;
private String name;
private String description;
private ZonedDateTime expireDate;
}
Coupon coupon = Coupon.builder()
.name("ビックリクーポン")
.description("ビックリなクーポン")
.expireDate(ZonedDateTime.parse("2017-01-30T23:59:59+09:00", DateTimeFormatter.ISO_OFFSET_DATE_TIME))
.build();
ただ、builderの呼び出しで値を指定しなかったプロパティはnull
になってしまう。
null以外のデフォルト値を設定しようと以下のように対象クラスに記述してもうまくいかない。
@Value
@Builder
public class Coupon {
private UUID id = UUID.randomUUID(); // 適用されない
private String name = ""; // 適用されない
private String description;
private ZonedDateTime expireDate;
}
そこで、今回はデフォルト値を正しく設定する方法を紹介する。
@Builder
のデフォルト値を設定する方法
デフォルト値を設定するには、以下のように対象のクラス名+Builder
の命名規則でbuilderクラスを記述すればよい。あとは良しなにLombokが補完してくれる。
@Value
@Builder
public class Coupon {
private UUID id;
private String name;
private String description;
private ZonedDateTime expireDate;
public static class CouponBuilder {
private UUID id = UUID.randomUUID();
private String name = "";
}
}