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

标签 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);
    }
}

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

相关文章:

java - 多语言 JPA 实体映射

java - 通过 Flink REST API 在 AWS EMR 上运行 Flink 作业

python - 捕获无法处理的异常并重新引发

java - 使用 mysql PrepareStatement 取消引用可能的空指针警告

java.lang.NullPointerException 在 org.apache.struts2.StrutsJUnit4TestCase.executeAction(StrutsJUnit4TestCase.java :134)

java - 使用 Java API 而不是 FXML

java - 无法让 Canvas/CanvasLayer 在 Playn 中工作

java - 如何在 Java 的 MVC 设计中创建 View 部分和模型部分之间的关​​系?

php - 有没有办法在不必创建变量的情况下捕获异常?

java - 什么是NullPointerException,我该如何解决?