Podczas czytania kodu źródłowego JDK często zdarza się, że autor sprawdza parametry, jeśli są one puste, a następnie ręcznie rzuca nowy wyjątek NullPointerException (). Dlaczego oni to robią? Myślę, że nie ma takiej potrzeby, ponieważ wywoła nową NullPointerException (), gdy wywoła dowolną metodę. (Oto przykładowy kod źródłowy 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;
}
ArgumentNullExceptionw takich przypadkach (a nie NullReferenceException) - w rzeczywistości jest to naprawdę dobre pytanie, dlaczego podnosisz NullPointerExceptionjawnie tutaj (zamiast innego).
IllegalArgumentExceptionlub NullPointerExceptiono zerowy argument. Konwencja JDK jest tym drugim.