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]にあります。