Java 是否有JDK或Guava方法将空列表转换为空列表?

Java 是否有JDK或Guava方法将空列表转换为空列表?,java,collections,guava,Java,Collections,Guava,JDK或Google Guava中是否有类似的方法 public static <T> Collection<T> safe(Collection<T> collection) { if (collection == null) { return new ArrayList<>(0); } else { return collection; } } 不会崩溃 我环顾四周,但没有找到任何这样的

JDK或Google Guava中是否有类似的方法

public static <T> Collection<T> safe(Collection<T> collection) {
    if (collection == null) {
        return new ArrayList<>(0);
    } else {
        return collection;
    }
}
不会崩溃


我环顾四周,但没有找到任何这样的方法,我想知道我是否错过了它,或者是否有一个原因,为什么这样一个方便的方法不方便,因此没有包括在内?

因此,据我所知,不存在这类函数。然而,正如上面所示,编写一个是微不足道的。之所以可能没有包含它,原因是
null
具有特定的含义,并且在传递时可能不适合返回空的
集合。通常(根据我的经验),当一个空值进入系统时,链的更高层出现故障,或者无效值没有被正确清除。

Objects.firstNonNull(list,ImmutableList.of());
Objects.firstNonNull(list, ImmutableList.<Foo>of());

不需要专门的方法,当您从一个调皮的API获得一个可能为空的集合时,我们建议您立即使用这个解决方案,理想情况下,这个集合一开始就不应该这样做。

Apache Collections 4有一个通用方法
ListUtils.emptyIfNull(List List)


以下是文档:

在Java 8中,可以使用:

Optional.ofNullable(foo.canReturnANullListOfStrings()).orElse(Collections.emptyList());
Java 9的更新:

java.util.Objects.requireNonNullElse(集合,列表())


仍然是必需的。

方法首先不应该返回
null
集合。我相信使用
collections.emptyList()可以轻松编写这样的方法
@SLaks原则上同意,但您无法控制其他人的代码:)一种有点令人困惑的方法是使用AspectJ和after建议,以保护自己不受返回
null
而不是空
集合的代码的影响。创建与返回
集合的方法的执行相匹配的切入点,如果原始返回值为
null
,则返回空的
集合。对
映射
列表
等重复上述步骤。但是,您的同事可能不喜欢这一点。最好的解决方案是imho。不幸的是,我经常在生成的包装中看到它,例如一些JSON。没有这种方法,
for(String thing:someObjFromJson.getFoo().getBar().getListOfThings()){…do stuff…}
这样的构造就变得不那么简单了。这是一种让简单任务看起来复杂的方法。使用下面注释中的apache collections ListUtils.emptyIfNull。读起来好多了。
Optional.ofNullable(foo.canReturnANullListOfStrings()).orElse(Collections.emptyList());