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

Why does java.lang.Iterable.forEach() invoke requireNonNull()?

这是在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

你自己回答了:如果可迭代对象为空,方法仍然必须抛出一个NullPointerExceptionQuote:

Throws:
NullPointerException - if the specified action is null