增强的 for 循环中的空值检查

2022-08-31 06:14:55

在 Java 中防止 for 循环中的 null 的最佳方法是什么?

这看起来很丑陋:

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

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

可能没有任何其他方法。他们应该把它放在构造本身中,如果它是空的,那么不要运行循环?for


答案 1

您应该更好地验证从何处获取该列表。

您只需要一个空列表,因为空列表不会失败。

如果您从其他地方获得此列表,并且不知道是否可以,则可以创建一个实用程序方法并按如下方式使用它:

for( Object o : safe( list ) ) {
   // do whatever 
 }

当然是:safe

public static List safe( List other ) {
    return other == null ? Collections.EMPTY_LIST : other;
}

答案 2

您可能会编写一个帮助器方法,如果传入 null,则该方法返回空序列:

public static <T> Iterable<T> emptyIfNull(Iterable<T> iterable) {
    return iterable == null ? Collections.<T>emptyList() : iterable;
}

然后使用:

for (Object object : emptyIfNull(someList)) {
}

我不认为我真的会这样做 - 我通常会使用你的第二种形式。特别是,“或抛出ex”很重要 - 如果它真的不应该是空的,你绝对应该抛出一个异常。你知道出了什么问题,但你不知道损害的程度。提前中止。