簡體   English   中英

Lombok @Builder 不初始化集合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM