Lombok 内部集合初始化

Lombok inner collection initialization

我使用 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);
    }

}

如果 list 为空,这将抛出 NullPointerException。我目前的策略是永远不允许发生,内部集合可能为空,它在构造函数 (setter, builder...) 中被清理。然而,在这种情况下是由 Lombok 自动生成的构造函数。有什么办法,如何确保 list 属性 将始终至少初始化为一个空集合,还是我必须开始编写乏味的空检查?

如果您传入的列表有可能为空,您可以覆盖构造函数

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

来自 Project Lombok(强调我的):Value

@Value is shorthand for: final @ToString @EqualsAndHashCode @AllArgsConstructor @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) @Getter, except that explicitly including an implementation of any of the relevant methods simply means that part won't be generated and no warning will be emitted

注解@lombok.NonNull就可以了:

@NonNull    
private final List<String> list;

这会在构造函数和 setter 中生成以下代码:

if (list == null)
  throw new NullPointerException("list is marked @NonNull but is null");