空集合转换为空

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。检查将在实例化期间用空列表覆盖空值。