2017-02-15 127 views
1

我使用Lombok @Value註釋。是否有可能以某種方式確保內部收集永遠不會爲空?龍目島內部集合初始化

例子:

package com.testapp; 

import lombok.Value; 
import lombok.experimental.Wither; 

import java.util.List; 

@Value 
@Wither 
public final class ClassWithList { 

    private final List<String> list; 

    public void printList() { 
     list.forEach(System.out::println); 
    } 

} 

,這將拋出一個NullPointerException如果list爲null。我目前的策略是永遠不允許發生,內部集合可能爲空,它在構造函數(setter,builder ...)中被消毒。但是在這種情況下,Lombok自動生成構造函數。有沒有辦法,如何確保list屬性將始終至少初始化爲一個空集合,還是必須開始編寫乏味的空檢查?

回答

3

您可以重寫構造函數,如果有機會的話,你是通過在列表爲空

public ClassWithList(List<String> aList) { 
    this.list = aList == null ? new ArrayList<>() : aList; 
} 

從項目龍目島(重點煤礦):Value

@Value是簡寫:final @ToString @EqualsAndHashCode @AllArgsConstructor @FieldDefaults(makeFinal = true,level = AccessLevel.PRIVATE)@Getter,除非明確包含任何相關方法的執行ds只是意味着不會生成零件並且不會發出警告

+0

出於某種原因,我認爲不可能聲明由Lombok生成的方法。 – Michal