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;
}
ArgumentNullExceptionin casi del genere (piuttosto che NullReferenceException) - in realtà è davvero una buona domanda sul perché dovresti sollevare NullPointerExceptionesplicitamente qui (piuttosto che uno diverso).
IllegalArgumentExceptiono NullPointerExceptionper un argomento nullo. La convenzione JDK è quest'ultima.