Ao ler o código-fonte JDK, acho comum que o autor verifique os parâmetros se eles forem nulos e, em seguida, jogue nova NullPointerException () manualmente. Por que eles fazem isso? Eu acho que não há necessidade de fazer isso, pois ele lançará um novo NullPointerException () quando ele chama qualquer método. (Aqui está um código-fonte do HashMap, por exemplo :)
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
em casos como esse (em vez de NullReferenceException
) - é realmente uma boa pergunta sobre por que você levantaria NullPointerException
explicitamente aqui (em vez de outro).
IllegalArgumentException
ou NullPointerException
para um argumento nulo. A convenção JDK é a última.