如果list为null,则使用lombok getter初始化列表?

时间:2016-07-22 08:48:45

标签: java java-8 lombok

我正在替换所有标准POJO,以便将Lombok用于所有样板代码。我发现自己保留了列表的getter,因为如果列表尚未初始化,我想返回一个空列表。也就是说,我不希望getter返回null。如果有一些我不知道的lombok魔法可以帮助我避免这样做吗?

生成代码的示例

private List<Object> list;
public Object getList(){ return list; }

我想要的是:

private List<Object> list;
public Object getList(){
    if (list == null) {
        return new ArrayList();
    }
    return list;
}

5 个答案:

答案 0 :(得分:7)

您可以通过声明和初始化字段来实现此目的。初始化封闭对象时将完成初始化。

private List<Object> list = new ArrayList();

Lomboks @Getter注释提供了一个允许延迟初始化的属性lazy

 @Getter(lazy=true) private final double[] cached = expensiveInitMethod();

Documentation

答案 1 :(得分:6)

我遇到了与此问题相同的问题。虽然上述答案在某些方面很有用,但确切的解决方案是使用Lombok API的@Builder@Singular注释,如下面给出的代码。

它对我来说非常棒。

@Builder
class MyClass{
    @Singular
    private List<Type> myList;
}

这将使用非null List对象初始化myList。虽然,这个问题很古老。但是,仍然发布这个答案,以帮助像我这样将来会提到这个问题的人。

答案 2 :(得分:1)

  

也就是说,我不希望getter返回null。如果有一些我不知道的lombok魔法可以帮助我避免这样做吗?

你不需要任何魔法发生。只需初始化list

答案 3 :(得分:1)

您可以使用字段上的AccessLevel.NONE覆盖任何您喜欢的getter。

请注意,仅仅初始化字段不会保护您免受调用带有null的构造函数的客户端的影响,或者调用带有null的setter(仍然可能没问题,具体取决于您的需要)。

E.g。

@Getter(AccessLevel.NONE)
private Map<String, String> params;

public Map<String, String> getParams() {
    return (params == null) ? new HashMap<>() : params;
}

答案 4 :(得分:0)

一个古老的问题,但是这个插件可以满足您的要求:

https://github.com/dmak/jaxb-xew-plugin

使用此插件生成的吸气剂为:

public List<BaseVariableType> getVariables() {
    if (variables == null) {
        variables = new ArrayList<BaseVariableType>();
    }
    return variables;
}