Beim Lesen von JDK-Quellcode wird häufig festgestellt, dass der Autor die Parameter überprüft, wenn sie null sind, und dann manuell eine neue NullPointerException () auslöst. Warum machen sie das? Ich denke, es ist nicht nötig, dies zu tun, da es eine neue NullPointerException () auslöst, wenn es eine Methode aufruft. (Hier ist zum Beispiel ein Quellcode von 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
in solchen Fällen (und nicht NullReferenceException
) ansprechen - es ist eigentlich eine wirklich gute Frage, warum Sie das NullPointerException
hier explizit ansprechen würden (anstatt eine andere).
IllegalArgumentException
oder nicht NullPointerException
. Die JDK-Konvention ist die letztere.