Saat membaca kode sumber JDK, saya merasa umum bahwa penulis akan memeriksa parameter jika mereka nol dan kemudian melemparkan NullPointerException () baru secara manual. Mengapa mereka melakukannya? Saya pikir tidak perlu melakukannya karena itu akan membuang NullPointerException () baru ketika memanggil metode apa pun. (Berikut adalah beberapa kode sumber HashMap, misalnya :)
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
dalam kasus-kasus seperti itu (bukan NullReferenceException
) - itu sebenarnya pertanyaan yang sangat bagus tentang mengapa Anda mengajukan NullPointerException
secara eksplisit di sini (daripada yang berbeda).
IllegalArgumentException
atau NullPointerException
untuk argumen nol. Konvensi JDK adalah yang terakhir.