当您将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是什么。