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