阅读JDK源代码时,我发现作者经常会检查参数是否为空,然后手动抛出一个新的NullPointerException()异常。他们为什么要这样做呢?我认为没有必要这样做,因为当调用任何方法时,它会自动抛出新的NullPointerException()异常。(例如HashMap的一些源代码:)
public V computeIfPresent(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
if (remappingFunction == null)
throw new NullPointerException();
Node<K,V> e; V oldValue;
int hash = hash(key);
if ((e = getNode(hash, key)) != null &&
(oldValue = e.value) != null) {
V v = remappingFunction.apply(key, oldValue);
if (v != null) {
e.value = v;
afterNodeAccess(e);
return v;
}
else
removeNode(hash, key, null, false, true);
}
return null;
}
ArgumentNullException
异常(而不是NullReferenceException
)。实际上,为什么要在这里显式引发NullPointerException
异常而不是其他异常,这是一个非常好的问题。 - EJoshuaS - Stand with UkraineIllegalArgumentException
还是NullPointerException
。JDK惯例是后者。 - shmosel