为什么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;
}