Lombokの@Builderアノテーションを使う
1概要
Project Lombokのhttps://projectlombok.org/features/Builder[
@Builder
]は、定型コードを記述せずに
Builderパターン
を使用するための便利なメカニズムです。このアノテーションを
Class
またはメソッドに適用することができます。
この簡単なチュートリアルでは、
@ Builder
のさまざまな使用例を見ていきます。
2 Mavenの依存関係
まず、https://projectlombok.org/[Project Lombok]を
pom.xml
に追加する必要があります。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20.0</version>
</dependency>
Maven Centralにはhttps://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22org.projectlombok%22[最新バージョンのProject Lombok]があります。]
3クラスで
@ Builder
を使用する
最初のユースケースでは、単に
Class
を実装しているだけなので、ビルダーを使用してクラスのインスタンスを作成します。
最初で唯一のステップは、クラス宣言に注釈を追加することです。
@Getter
@Builder
public class Widget {
private final String name;
private final int id;
}
-
Lombokは私たちのためにすべての作業を行います** 私たちは今
ウィジェット
を構築し、それをテストすることができます:
Widget testWidget = Widget.builder()
.name("foo")
.id(1)
.build();
assertThat(testWidget.getName())
.isEqualTo("foo");
assertThat(testWidget.getId())
.isEqualTo(1);
-
オブジェクトのコピーまたはほぼコピーを作成したい場合は、
@ Builder
アノテーションに
toBuilder = true
というプロパティを追加できます。
@Builder(toBuilder = true)
public class Widget {//...
}
これは、
toBuilder()
メソッドを
Class
に追加するようにLombokに指示します。
toBuilder()
メソッドを呼び出すと、呼び出されたインスタンスのプロパティで初期化されたビルダーが返されます。
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”
が追加されています。それから、欲しいプロパティと新しいインスタンスを作成することができます。
4メソッドで
@ Builder
を使用する
ビルダーで構築したいオブジェクトを使用しているとしますが、ソースを変更したり
Class ** .を拡張することはできません
まず、link:/intro-to-project-lombokを使用して簡単な例を作成しましょう。
@Value
final class ImmutableClient {
private int id;
private String name;
}
これで、2つの不変メンバー、それらのためのゲッター、およびすべての引数を持つコンストラクターを持つ
final
Class
ができました。
-
Class
で
@ Builder
を使用する方法を説明しましたが、メソッドでも使用できます。
次に、ImmutableClientsを作成するためのメソッドを使用して新しいクラスを作成します。
class ClientBuilder {
@Builder(builderMethodName = "builder")
public static ImmutableClient newClient(int id, String name) {
return new ImmutableClient(id, name);
}
}
このアノテーションは、
ImmutableClients
** を作成するための
Builder
を返す
builder()
という名前のメソッドを作成します。
これで
ImmutableClient
を構築できます。
ImmutableClient testImmutableClient = ClientBuilder.builder()
.name("foo")
.id(1)
.build();
assertThat(testImmutableClient.getName())
.isEqualTo("foo");
assertThat(testImmutableClient.getId())
.isEqualTo(1);
5結論
この記事では、Lombokの
@ Builder
アノテーションをメソッドに使用して、
最終
__クラスのビルダーを作成しました。
いつものように、コードサンプルはhttps://github.com/eugenp/tutorials/tree/master/lombok[over on GitHub]にあります。