Khi đọc mã nguồn JDK, tôi thấy thông thường rằng tác giả sẽ kiểm tra các tham số nếu chúng là null và sau đó ném NullPulumException () mới theo cách thủ công. Tại sao họ làm điều đó? Tôi nghĩ rằng không cần phải làm như vậy vì nó sẽ ném NullPulumException () mới khi nó gọi bất kỳ phương thức nào. (Đây là một số mã nguồn của HashMap, ví dụ :)
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
trong những trường hợp như vậy (chứ không phải NullReferenceException
) - đó thực sự là một câu hỏi hay về lý do tại sao bạn nêu ra NullPointerException
một cách rõ ràng ở đây (chứ không phải là một câu hỏi khác).
IllegalArgumentException
hay NullPointerException
cho một cuộc tranh luận không có giá trị. Quy ước JDK là sau.