【发布时间】:2012-07-07 13:57:27
【问题描述】:
当不确定集合引用是否为 null 时,我必须在迭代之前检查 null 是很常见的。 示例:
Collection<Object> collection = ...
...
if(collection != null)//troublesome
for(Object o : collection)
当然,我知道空集合比 null 好得多,但在某些情况下,客户端代码无法控制来自其他模块的可为空集合(例如,来自 3rd 方代码的返回值)。 于是我写了一个实用方法:
public static <T> Iterable<T> nullableIterable(Iterable<T> it){
return it != null ? it : Collections.<T>emptySet();
}
在客户端代码中,不再需要检查null:
for(Object o : nullableIterable(collection))
...
你觉得nullableIterable()合理吗?有什么建议吗?有什么顾虑吗?谢谢!
【问题讨论】:
-
是的,我也这样做。我的方法叫
nullSafe()... -
@LukasEder nullSafe() 返回什么默认 Iterable 实例?
-
我在实用程序类中重载了
nullSafe(List)、nullSafe(Set)等...但是您的想法也很有效,因为您只公开了Iterable类型。具体的Iterable实现与调用站点无关 -
如果有人选择通过忽略空值来进行代码防御,这是很好的方法stackoverflow.com/a/2250056/1506477
标签: java collections iterator