为什么AbstractSet.removeAll会在传递null时抛出NullPointerException?

时间:2017-01-18 16:44:59

标签: java architecture

当您将null值传递给removeAll时,AbstractSet的OpenJDK实现会抛出NullPointerException。

http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/tip/src/share/classes/java/util/AbstractSet.java

    public boolean removeAll(Collection<?> c) {
    Objects.requireNonNull(c);

e.g。

    Set<String> parent = new HashSet<String>();
    Set<String> children = null;
    parent.removeAll(children);

结果

Exception in thread "main" java.lang.NullPointerException
    at java.util.AbstractSet.removeAll(AbstractSet.java:152)

这背后的架构逻辑是什么?

为什么不进行空检查并返回modified = false而不是抛出NullPointerException?

在区分null和空集之间,这种情况有什么好处?

编辑:

我知道界面指定了它。您可以询问有关界面的相同问题。问题的关键在于,从某些东西中删除任何东西都会让你失去原作。抛出NullPointerException似乎不合逻辑。

对于那些应该修复任何null的人来说,这不是在这种情况下抛出NullPointerException的逻辑原因。

这不是What is a NullPointerException, and how do I fix it?的重复问题,因为我询问的是特定方法的架构设计,而不是询问NPE是什么。

0 个答案:

没有答案