在循环之前检查 isEmpty 有好处吗?

S.D*_*Dan 1 java loops for-loop is-empty

我在某处看到了以下代码,想知道检查是否有任何实际好处isEmpty。有不对吗?

List<Long> someIds = ..

if (someIds != null && !someIds.isEmpty()) {
    for (Long someId : someIds) {
        // something
    }
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 5

在迭代列表之前检查列表是否为空是初学者常见的反模式。它不会造成伤害,但没有必要。这是缺乏经验的表现。

允许空容器是一个相关的反模式。允许容器为空通常是错误的。然后,您必须检查是否为 null,而 null 容器和空容器之间的区别令人困惑。这种区别有意义吗?可能不会。

最后,如果变量不应该为空,那么最好不要检查和忽略空值。最好让代码因空指针异常而崩溃。大声失败。一声巨响就出去了。

考虑到所有这些,我通常会去掉这两项if检查并简单地写:

List<Long> someIds = ..

for (Long someId: someIds) {
    // something
}
Run Code Online (Sandbox Code Playgroud)