这是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,则抛出完全相同的异常?
答案 0 :(得分:4)
这样做是为了在iterable为空和非空时的情境之间实现一致的行为。如果不事先进行此检查,则在传递null
操作时该方法将成功完成,但是iterable为空。
但是,这与文档相矛盾,后者表示如果指定的操作是NullPointerException
,则始终会抛出null
。
答案 1 :(得分:2)
你自己回答:如果iterable为空,那么该方法仍然必须抛出NullPointerException
。 Quote:
<强>抛出:强>
NullPointerException
- 如果指定的操作为空