[英]Lombok @Builder not initializing collections
我正在使用 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 ) 的第 55 行和第 56 行中指出,我應該查看@Singular
的代碼示例@Singular
( https://projectlombok.org/features/Singular-snippet.html )。 在此處的 Vanilla Java 示例的第 112 行,該列表似乎應該初始化為空列表。
我查了一下,如果我用@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
文檔指的是@Singular
文檔)。
只有當您使用@Singular
,您才會得到一個空列表。 在Builder 文檔頁面上,它說:
...使用
@Singular
注釋,@Singular
會將構建器節點視為一個集合。
如果沒有@Singular
, @Singular
會將其視為任何其他對象。 因此它將為null
而不是空集合。
披露:我是龍目島的開發人員
從 Lombok v1.16.16 開始,您可以默認使用 @Builder 的內部注釋來初始化您的集合。 例如:
@Data
@Builder
class Movie {
@Builder.Default
private final List<Actor> actors = new ArrayList<>();
}
因此,當您使用構建器創建新電影時,無需指定任何演員:
Movie movie = Movie.builder().build();
movie.getActors(); // Will return instance of ArrayList
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.