私は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を参照するため)。
@Singular
を使用する場合のみ、空のリストを取得します。 Builderドキュメントページ には次のように書かれています:
…
@Singular
アノテーションを使用すると、lombokはそのビルダーノードをコレクションとして扱います。
@Singular
がない場合、lombokはそれを他のオブジェクトとして扱います。したがって、空のコレクションではなくnull
になります。
開示:私はロンボク島の開発者です