有没有办法在 for-each 循环迭代开始之前避免空值检查?
每次我必须迭代一个集合时,我最终都会在 for-each 循环的迭代开始之前检查 null。喜欢这个:
if( list1 != null ){
for(Object obj : list1){
}
}
有没有更短的方法,这样我们就可以避免编写“if”块?注意:我正在使用Java 5,并且会坚持一段时间。
每次我必须迭代一个集合时,我最终都会在 for-each 循环的迭代开始之前检查 null。喜欢这个:
if( list1 != null ){
for(Object obj : list1){
}
}
有没有更短的方法,这样我们就可以避免编写“if”块?注意:我正在使用Java 5,并且会坚持一段时间。
如果可能,应将代码设计为集合不在一开始就放在首位。null
null
收集是不好的做法(出于这个原因);您应该改用空集合。(例如,Collections.emptyList()
)
或者,您可以创建一个包装类,该类实现并获取集合,并处理集合。
然后你可以写Iterable
null
foreach(T obj : new Nullable<T>(list1))
public <T extends Iterable> T nullGuard(T item) {
if (item == null) {
return Collections.EmptyList;
} else {
return item;
}
}
或者,如果保存文本行是优先级(不应该是)
public <T extends Iterable> T nullGuard(T item) {
return (item == null) ? Collections.EmptyList : item;
}
会允许你写
for (Object obj : nullGuard(list)) {
...
}
当然,这实际上只是将复杂性转移到了其他地方。