2015-09-28 62 views
13

我使用的龍目島的@Data@Builder註釋是這樣的:龍目島@Builder未初始化的集合

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

    // Some other fields here. 

    private final List<Actor> actors; 

} 

當我使用構建器,不指定任何角色創建一個新的Movie,我希望龍目島初始化我的列表到Collections.emptyList()。但是,這種情況不會發生:

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

在爲@Builder註釋的文檔,它在代碼示例香草的Java(https://projectlombok.org/features/Builder.html)線55和56,我應該看看代碼示例@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文檔)。

+0

我正在使用龍目島版本1.16.6的方式。 – marstran

回答

22

只有當你使用@Singular時,你會得到一個空的列表。在Builder documentation page它說:

&hellip;與@Singular註釋,龍目島將把該構建器節點作爲一個集合。

沒有@Singular,lombok把它當作任何其他對象。所以它將是null而不是一個空的集合。

披露:我是龍目島開發商

+0

謝謝!順便說一下,如果集合的變量名不能單獨化,那麼'@ Singular'註釋會出錯。但是,當您將不可數名詞作爲變量名稱(如「設備」或「綿羊」)時,這會有點不方便。爲什麼不能將生成的單數方法命名爲複數,而不是給出編譯錯誤? – marstran

+0

我們的短期研究讓我們相信在實際軟件中使用的詞彙並不多。每當龍目島不確定時,我們都會在安全的方面犯錯。這不是一個警告嗎? –

+2

我意識到我可以只是指定這個'@Singular(「equipment」)'這個名字,而且它起作用了。謝謝你的幫助! – marstran