有没有这样一个在JDK或谷歌番石榴的方法
public static <T> Collection<T> safe(Collection<T> collection) {
if (collection == null) {
return new ArrayList<>(0);
} else {
return collection;
}
}
这使得它易于不是在增强的循环崩溃,如果返回的东西,例如一个空列表
for (String string : CollectionUtils.safe(foo.canReturnANullListOfStrings())) {
// do something
}
不会崩溃。
我还是环顾四周,但找不到任何这样的方法,我想知道如果我错过了,如果是有原因的,为什么这样一个方便的方法是不是很方便,因此没有列入?
Objects.firstNonNull(list, ImmutableList.<Foo>of());
有没有必要为一个专门的方法,这确实是我们建议当你从一个顽皮的API,理想不应该这样做首先得到一个潜在的空收集您立即使用的解决方案。
Apache的类别4具有一个通用的方法ListUtils.emptyIfNull(List<T> list)
这里是DOC: https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/ListUtils.html
在Java 8,可以使用:
Optional.ofNullable(foo.canReturnANullListOfStrings()).orElse(Collections.emptyList());
更新的Java 9: java.util.Objects.requireNonNullElse(collection, List.<T>of())
所述<T>
仍然需要。
所以不存在的功能,我的这种认识。 但是写一个平凡如你如上图所示。 背后的原因可能未包括它的原因是因为null
都有特定的含义,它可能不适合返回一个空Collection
,当一个被传来传去。 一般而言(在我的经验),当一个空值进入系统失败的东西越往上链或无效的值没有正确消毒。