3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

これから現場で働く新卒向けに、研修では習わなかったが現場ではよく使うアノテーション@Builderについての記事を書くよ。まず初めに、lombokについて説明するよ。

lombokとは

lombok(ロンボック、ロンボクなどと呼ばれる)は、gettersetterなどを自動生成してくれる便利なライブラリだよ。筆者は、@Data@Value@Builderをよく使っているよ。今回は、@Builderにフォーカスして記事を書くよ。
eclipseでは、プロジェクトを立ち上げる際に依存関係に、以下のようにLombokを追加すると利用できるよ。
プロジェクトの立ち上げについて詳しく知りたい人は【図解】SpringBoot プロジェクトの立ち上げをみてね。

image.png

便利なアノテーション@Builder

では早速使っていくよ。新しいインスタンスを作るとき、通常はnewでコンストラクタを使って作るけど、@Builderを付けたクラスのインスタンスを作成するときは、コンストラクタを使わずにインスタンスを作成することができるよ。
初めに、インスタンスを作成したいクラスで、学籍番号idと指名nameを持ったStudentクラスを作成するとしたとき、通常はこんな感じ。

public class Student {
    // コンストラクタ
    Sample(int id, String name) {
		this.id = id;
		this.name = name;
	}

    /** 学籍番号 */
	int id;
    /** 指名 */
	String name;
}

@builderを使ったクラスの作成はこんな感じ。

@Builder
public class StudentBuilder {
    /** 学籍番号 */
	int id;
    /** 学籍番号 */
	String name;
 }

基本的な造りは同じで、違いは@Builderを書くことと、コンストラクタを書かない点だよ。

メリット

コンストラクタを使う場合では、クラスに新たに属性を追加したい場合に弱いよ。具体的には、パラメータの順番を変えたい、パラメータを増やしたい、減らしたい場合に弱く、チーム開発での修正が大変になるよ。また、常にパラメータの順番を意識しないといけないのが地味みつらい。。。
その点、@Builderを使えば、項目を選んで設定するだけなので、順番が変わったりパラメータが増えた場合でも目的の値をセットできるよ。

実際のインスタンスの作成はこんな感じ。

public class Main {
    public static void main(String[] args) {
    final int id = 1;
    final String name = "Qiita";

    // @Builderを用いなかった場合
    final Student student = new Student(id, name);

    // @Builderを用いた場合
    final StudentBuilder studentBuilder = StudentBuilder.builder() //
            .id(id) //
            .name(name) //
            .build();
    }
}

ちなみに、パラメータを設定しなかった場合、デフォルト値が入っていそう。
(今回の場合だと、int -> 0, String -> nullといった感じに入っていた。)

まとめ

@Builderは、コンストラクタなしにインスタンスの作成ができ、パラメータの変更などにも強いのでかなり便利。そして、メソッドチェーンで書けるので見やすくかっこいい。
ただし、パラメータが1つなど、少ない場合は可読性が下がるので通常のコンストラクタで書くのがよさそう。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?