Lombokの@Builderアノテーションを使用する
1. 概要
Project Lombokの@Builderは、定型コードを記述せずにBuilder patternを使用するための便利なメカニズムです。 このアノテーションは、Classまたはメソッドに適用できます。
この簡単なチュートリアルでは、@Builderのさまざまな使用例を見ていきます。
2. Mavenの依存関係
まず、pom.xmlにProject Lombokを追加する必要があります。
org.projectlombok
lombok
1.16.20.0
Maven Centralにはlatest version of Project Lombok here.があります
3. クラスで@Builderを使用する
最初のユースケースでは、単にClassを実装しており、ビルダーを使用してクラスのインスタンスを作成したいと考えています。
最初の唯一のステップは、クラス宣言に注釈を追加することです。
@Getter
@Builder
public class Widget {
private final String name;
private final int id;
}
Lombok does all of the work for us.これで、Widgetを作成してテストできます。
Widget testWidget = Widget.builder()
.name("foo")
.id(1)
.build();
assertThat(testWidget.getName())
.isEqualTo("foo");
assertThat(testWidget.getId())
.isEqualTo(1);
If we want to create copies or near-copies of objects, we can add the property toBuilder = true to the @Builder annotation:
@Builder(toBuilder = true)
public class Widget {
//...
}
これにより、LombokはtoBuilder()メソッドをClassに追加するようになります。 toBuilder()メソッドを呼び出すと、returns a builder initialized with the properties of the instance it is called on:
Widget testWidget = Widget.builder()
.name("foo")
.id(1)
.build();
Widget.WidgetBuilder widgetBuilder = testWidget.toBuilder();
Widget newWidget = widgetBuilder.id(2).build();
assertThat(newWidget.getName())
.isEqualTo("foo");
assertThat(newWidget.getId())
.isEqualTo(2);
テストコードを見ると、Lombokによって生成されたビルダークラスの名前がクラスと同じで、“Builder”が追加されていることがわかります。この場合はWidgetBuilderです。 次に、必要なプロパティを変更し、build()を新しいインスタンスに変更できます。
4. メソッドで@Builderを使用する
ビルダーで構築したいオブジェクトを使用しているが、can’t modify the source or extend the*Class*.
まず、Lombok’s @Value annotation:を使用して簡単な例を作成しましょう
@Value
final class ImmutableClient {
private int id;
private String name;
}
これで、2つの不変メンバー、それらのゲッター、およびすべての引数のコンストラクターを持つfinalClassができました。
We covered how to use @Builder on a Class, but we can use it on methods, too.この機能を使用して、ImmutableClientを変更または拡張できないことを回避します。
次に、ImmutableClientsを作成するためのメソッドを使用して新しいクラスを作成します。
class ClientBuilder {
@Builder(builderMethodName = "builder")
public static ImmutableClient newClient(int id, String name) {
return new ImmutableClient(id, name);
}
}
このアノテーションは、returns a Builder for creating ImmutableClientsであるbuilder()という名前のメソッドを作成します。
これで、ImmutableClientを作成できます。
ImmutableClient testImmutableClient = ClientBuilder.builder()
.name("foo")
.id(1)
.build();
assertThat(testImmutableClient.getName())
.isEqualTo("foo");
assertThat(testImmutableClient.getId())
.isEqualTo(1);
5. 結論
この記事では、メソッドでLombokの@Builderアノテーションを使用して、finalClass.のビルダーを作成しました
いつものように、コードサンプルはover on GitHubで見つけることができます。