【问题标题】:Why does java.lang.Iterable.forEach() invoke requireNonNull()?为什么 java.lang.Iterable.forEach() 调用 requireNonNull()?
【发布时间】:2015-02-12 14:44:14
【问题描述】:

这是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是非空的,并且我传递了一个空动作,它会抛出一个空指针异常无论如何,那么检查动作有什么意义,如果发现为空,则抛出完全相同的异常?

【问题讨论】:

    标签: java exception nullpointerexception java-8


    【解决方案1】:

    这样做是为了在可迭代对象为空和非空的情况下实现一致的行为。如果没有预先进行此检查,当您通过 null 操作时,该方法将成功完成,但可迭代对象为空。

    但是,这与文档相矛盾,文档中说,如果指定的操作是 null,则始终抛出 NullPointerException

    【讨论】:

      【解决方案2】:

      您自己回答:如果可迭代对象为空,则该方法仍必须抛出NullPointerExceptionQuote:

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

      【讨论】:

        猜你喜欢
        • 2015-02-15
        • 1970-01-01
        • 2018-07-31
        • 1970-01-01
        • 2018-10-20
        • 2016-07-15
        • 2020-03-28
        • 2014-12-28
        • 2011-09-17
        相关资源
        最近更新 更多