1

默认情况下,如果未提供任何集合,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 并将其转换为空集合。

4

1 回答 1

1

我建议您查看规范化功能,它可以在返回最终实例之前执行一些修改:

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

于 2020-05-15T14:23:26.190 回答