这是在 java.lang.Iterable
中:
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
这是 java.util.Objects.requireNonNull()
:
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
我的理解是,如果 iterable 是非空的,并且我传递了一个空操作,它会抛出一个空指针异常无论如何,那么检查操作的意义何在,如果发现为空,则抛出完全相同的异常?
最佳答案
这样做是为了在可迭代对象为空和非空的情况下实现一致的行为。如果没有预先完成此检查,当您传递 null
操作时,该方法将成功完成,但可迭代对象为空。
但是,这会与文档相矛盾,文档说如果指定的操作为 null
,则总是抛出 NullPointerException
。
关于java - 为什么 java.lang.Iterable.forEach() 会调用 requireNonNull()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28480380/