2017-02-15 97 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