我正在替换所有标准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;
}
答案 0 :(得分:7)
您可以通过声明和初始化字段来实现此目的。初始化封闭对象时将完成初始化。
private List<Object> list = new ArrayList();
Lomboks @Getter
注释提供了一个允许延迟初始化的属性lazy
。
@Getter(lazy=true) private final double[] cached = expensiveInitMethod();
答案 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;
}