JDK kaynak kodunu okurken, yazarın parametreleri null olup olmadığını kontrol edip yeni NullPointerException () 'ı manuel olarak atacağını ortak buluyorum. Neden yapıyorlar? Herhangi bir yöntem çağırdığında yeni NullPointerException () atacak beri bunu gerek yok düşünüyorum. (Örneğin, HashMap'in bazı kaynak kodu:
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;
}
ArgumentNullExceptiondurumlarda (yerine NullReferenceException) yükseltmektir - aslında neden NullPointerExceptionburada (farklı bir tane yerine) açıkça ortaya koyacağınız konusunda gerçekten iyi bir soru .
IllegalArgumentExceptionya NullPointerExceptionboş argüman için. İkincisi JDK sözleşmesidir.