为什么java.lang.Iterable.forEach()调用requireNonNull()?

为什么java.lang.Iterable.forEach()调用requireNonNull()?,java,exception,nullpointerexception,java-8,Java,Exception,Nullpointerexception,Java 8,这在java.lang.Iterable中: default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } } 按照我的理解,如果iterable是非空的,并且我传递了一个null操作,它将抛出一个null指针异常,那么检查该操作的意义是什么呢,如果发现为null

这在
java.lang.Iterable
中:

default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}

按照我的理解,如果iterable是非空的,并且我传递了一个null操作,它将抛出一个null指针异常,那么检查该操作的意义是什么呢,如果发现为null,则抛出完全相同的异常?

这样做是为了在iterable为空和非空的情况下实现一致的行为。如果不预先进行此检查,当您传递
null
操作时,该方法将成功完成,但iterable为空


但是,这与文档中的说法相矛盾,文档中说,如果指定的操作为
null

则始终会引发
NullPointerException
,这样做是为了在iterable为空和非空的情况下实现一致的行为。如果不预先进行此检查,当您传递
null
操作时,该方法将成功完成,但iterable为空


但是,这与文档中的说法相矛盾,文档中说,如果指定的操作为
null
,则始终会引发
NullPointerException
,您自己回答:如果iterable为空,则该方法仍必须引发
NullPointerException

抛出:
NullPointerException
-如果指定的操作为null


您自己回答了:如果iterable为空,则该方法仍必须抛出
NullPointerException

抛出:
NullPointerException
-如果指定的操作为null

public static <T> T requireNonNull(T obj) {
    if (obj == null)
        throw new NullPointerException();
    return obj;
}