web-dev-qa-db-ja.com

Lombok @Builderがコレクションを初期化しない

私はLombokの_@Data_と_@Builder_アノテーションを次のように使用しています:

_@Data
@Builder(toBuilder = true)
class Movie {

    // Some other fields here.

    private final List<Actor> actors;

}
_

ビルダーを使用して、アクターを指定せずに新しいMovieを作成すると、LombokがListをCollections.emptyList()に初期化することを期待します。しかし、これは起こりません:

_List<Actor> actors = Movie.builder().build().getActors();
System.out.println(actors); // Prints 'null'.
_

_@Builder_アノテーションのドキュメントでは、Vanilla Java(- https://projectlombok.org/ features/Builder.html )_@Singular_のコード例を見てください( https://projectlombok.org/features/Singular-snippet.html )。バニラの112 Javaの例では、リストを空のリストに初期化する必要があるようです。

チェックしましたが、リストに_@Singular_の注釈を付けると、実際に起こります。

_@Data
@Builder(toBuilder = true)
class Movie {

    // Some other fields here.

    @Singular
    private final List<Actor> actors;

}

List<Actor> actors = Movie.builder().build().getActors();
System.out.println(actors); // Prints '[]'.
_

これはロンボク島のバグですか、それとも私が間違っていることはありますか?ドキュメントによると、リストは両方のケースで空のリストに初期化されるようです(_@Builder_ docは_@Singular_ docを参照するため)。

25
marstran

@Singularを使用する場合のみ、空のリストを取得します。 Builderドキュメントページ には次のように書かれています:

@Singularアノテーションを使用すると、lombokはそのビルダーノードをコレクションとして扱います。

@Singularがない場合、lombokはそれを他のオブジェクトとして扱います。したがって、空のコレクションではなくnullになります。

開示:私はロンボク島の開発者です

46
Roel Spilker