Java 是否有JDK或Guava方法将空列表转换为空列表?
JDK或Google 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; } } 不会崩溃 我环顾四周,但没有找到任何这样的
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());