【Java】Lombokの@AllArgsConstructorでファクトリメソッドを生成する設定方法

2020年8月29日

@AllArgsConstructor使用時にファクトリメソッドを生成する

Lombokで全てのフィールド変数を引数に持つコンストラクタを生成したい場合は以下の例のように@AllArgsConstructorを使います。

// importは省略

@AllArgsConstructor
public class Book {

    private int id;
    private String name;
    private int price;
}

インスタンスの作成はコンストラクタを使用します。

var book1 = new Book(1, "book1", 100);

@AllArgsConstructorにstatickNameを指定することでファクトリメソッドを生成することができます。以下の例ではofという名前のファクトリメソッドを生成します。

// importは省略

@AllArgsConstructor(staticName = "of")
public class Book {

    private int id;
    private String name;
    private int price;
}

以下のようにファクトリメソッドを使用してインスタンスを生成できます。コンストラクタはアクセスレベルがprivateに設定されるようなので、コンストラクタによるインスタンス生成はできなくなります。

// ファクトリメソッドによるインスタンス生成が可能となる
var book1 = Book.of(1, "book1", 100);

// コンストラクタがprivateになるためエラーとなる
var book2 = new Book(1, "", 10);