1前書き


プロジェクトロンボク

は、開発者が書く必要のある定型コードの量を減らすのに役立つ人気のあるJavaライブラリです。

このチュートリアルでは、Lombokのhttps://projectlombok.org/features/Builder[

@Builder

]注釈がどのように機能するのか、また特定のニーズに合わせてそれをカスタマイズする方法について説明します。


2 Mavenの依存関係


依存関係



pom.xml

に追加することから始めましょう。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.2</version>
</dependency>


3ロンボク

ビルダー

注釈

Lombokの生成されたビルダークラスのカスタマイズを検討する前に、Lombok

@ Builder

アノテーションがどのように機能するのかを簡単に説明しましょう。

Lombokの機能の紹介

は既に持っています。



  • @Builder

    アノテーション

    を使って自動的にクラスのビルダーを生成することができます** この例では、あるユーザーが別のユーザーにメッセージを送信できるメッセージングシステムを使用します。メッセージは単純なテキスト文字列か

    File

    です。

Lombokを使うと、

Message

クラスを次のように定義できます。

@Builder
@Data
public class Message {
    private String sender;
    private String recipient;
    private String text;
    private File file;
}


@ Data

は、単純なPOJO(Plain Old Java Object)に通常関連付けられているすべての定型句、つまりすべてのフィールドのゲッター、すべての非最終フィールドのセッター、および適切な

toString



equals



hashCode

の実装、およびコンストラクターを生成します。

生成されたビルダーを使用して、

Message

クラスのインスタンスを生成することができます。

Message message = Message.builder()
  .sender("[email protected]")
  .recipient("[email protected]")
  .text("How are you today?")
  .build();


@ Builder

アノテーションは属性のデフォルト値もサポートしていますが、ここでは説明しません。この例から、

@ Builder

アノテーションは非常に強力であり、多くの定型コードを置き換えることができることが明らかです。


4ロンボク建築者のカスタマイズ

前のセクションでは、Lombokを使用してビルダークラスを生成する方法を説明しました。しかし、生成されたビルダーでは不十分な場合があります。

この例では、メッセージにはテキストまたはファイルのみを含めることができるという制約があります。両方を持つことはできません。ロンボクはもちろんそれを知りません、そして生成されたビルダーは私たちがその違法な状態に入ることを喜んで許します。

幸いなことに、この問題に対処してビルダーをカスタマイズすることができます。

Lombokビルダーのカスタマイズは単純で簡単です。

カスタマイズしたいビルダーの部分を作成し、Lombok

@ Builder

アノテーションはそれらの部分を生成しません

。したがって、この例では、それは次のようになります。

public static class MessageBuilder {
    private String text;
    private File file;

    public MessageBuilder text(String text) {
        this.text = text;
        verifyTextOrFile();
        return this;
    }

    public MessageBuilder file(File file) {
        this.file = file;
        verifyTextOrFile();
        return this;
    }

    private void verifyTextOrFile() {
        if (text != null && file != null) {
            throw new IllegalStateException("Cannot send 'text' and 'file'.");
        }
    }
}


sender



recipient

のメンバー、またはそれらに関連するビルダーメソッドを宣言する必要はないことに注意してください。ロンボクはまだそれらを私たちのために生成するでしょう。

次のコードを使用して、テキストとファイルの両方を使用して

Message

インスタンスを生成しようとしたとします。

Message message = Message.builder()
  .sender("[email protected]")
  .recipient("[email protected]")
  .text("How are you today?")
  .file(new File("/path/to/file"))
  .build();

次の例外が発生します。

Exception in thread "main" java.lang.IllegalStateException: Cannot send 'text' and 'file'.


5結論

この簡単な記事では、Lombok Builderをカスタマイズする方法について説明しました。

いつものように、コードはhttps://github.com/eugenp/tutorials/tree/master/lombok[over on GitHub]から入手できます。