默认情况下,如果未提供任何集合,immutables.io将创建空集合。
@Value.Immutable
public abstract class MyTestPojo {
public abstract List<String> myList();
}
以下操作将创建具有空集合的对象:
MyTestPojo pojo = ImmutableMyTestPojo.builder()
.build();
但是,如果该值显式设置为null,免疫表将抛出NPE。
MyTestPojo pojo2 = ImmutableMyTestPojo.builder()
.myList(null)
.build();
这可以通过允许@Nullable
为null来避免。这将导致集合为null。我希望这种情况能够优雅地处理null并将其转换为空集合。
我建议您研究规范化特性,它可以在返回最终实例之前执行一些修改:
@Value.Immutable
public abstract class MyTestPojo {
@Nullable
public abstract List<String> myList();
@Value.Check
protected MyTestPojo check() {
if ( myList() == null ) {
return ImmutableMyTestPojo.copyOf(this).withMyList();
}
return this;
}
}
请注意,myList
属性是用@Nullable
进行注释的。该检查将在实例化期间用空列表覆盖null值。