空集合转换为空
Null collections converted to empty
默认情况下,如果提供 none,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 并将其转换为空集合。
我建议您查看 normalization feature,它可以在返回最终实例之前执行一些修改:
@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
。检查将在实例化期间用空列表覆盖空值。
默认情况下,如果提供 none,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 并将其转换为空集合。
我建议您查看 normalization feature,它可以在返回最终实例之前执行一些修改:
@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
。检查将在实例化期间用空列表覆盖空值。