在Java中防止for循环为空的最好方法是什么?

这看起来很丑陋:

if (someList != null) {
    for (Object object : someList) {
        // do whatever
    }
}

Or

if (someList == null) {
    return; // Or throw ex
}
for (Object object : someList) {
    // do whatever
}

可能没有别的办法了。他们是否应该把它放在for构造本身中,如果它是null,那么就不运行循环?


当前回答

如果你从你实现的方法调用中获得List,那么不要返回null,而是返回一个空的List。

如果你不能改变实现,那么你就会被空检查所困。如果它不应该为空,则抛出异常。

我不会选择返回空列表的helper方法,因为它有时可能有用,但这样你就会习惯在每次循环中调用它,可能会隐藏一些错误。

其他回答

另一种有效防止for循环中出现null值的方法是使用谷歌Guava的Optional<T>包装集合,因为这样可以明确有效空集合的可能性,因为客户端将期望使用Optional. ispresent()检查集合是否存在。

如果你从你实现的方法调用中获得List,那么不要返回null,而是返回一个空的List。

如果你不能改变实现,那么你就会被空检查所困。如果它不应该为空,则抛出异常。

我不会选择返回空列表的helper方法,因为它有时可能有用,但这样你就会习惯在每次循环中调用它,可能会隐藏一些错误。

Java 8可选:

for (Object object : Optional.ofNullable(someList).orElse(Collections.emptyList())) {
    // do whatever
}

现在已经是2017年了,您现在可以使用Apache Commons Collections4了

的用法:

for(Object obj : ListUtils.emptyIfNull(list1)){
    // Do your stuff
}

您可以使用CollectionUtils.emptyIfNull对其他Collection类进行相同的空安全检查。

for (Object object : someList) {

   // do whatever
}  throws the null pointer exception.