Quando leggo il codice sorgente JDK, trovo comune che l'autore controllerà i parametri se sono nulli e quindi lancia manualmente il nuovo NullPointerException (). Perché lo fanno? Penso che non sia necessario farlo poiché genererà nuovo NullPointerException () quando chiama un metodo. (Ecco un codice sorgente di HashMap, ad esempio :)
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 casi del genere (piuttosto che NullReferenceException
) - in realtà è davvero una buona domanda sul perché dovresti sollevare NullPointerException
esplicitamente qui (piuttosto che uno diverso).
IllegalArgumentException
o NullPointerException
per un argomento nullo. La convenzione JDK è quest'ultima.