เมื่ออ่านซอร์สโค้ดของ JDK ฉันพบว่าเป็นเรื่องธรรมดาที่ผู้เขียนจะตรวจสอบพารามิเตอร์ว่าเป็นโมฆะหรือไม่จากนั้นให้โยน NullPointerException () ใหม่ด้วยตนเอง ทำไมพวกเขาทำมัน ฉันคิดว่าไม่จำเป็นต้องทำเช่นนั้นเพราะมันจะโยน NullPointerException ใหม่ () เมื่อเรียกวิธีการใด ๆ (นี่คือซอร์สโค้ดของ 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;
}
          ArgumentNullExceptionในกรณีเช่นนั้น (มากกว่าNullReferenceException) - จริง ๆ แล้วเป็นคำถามที่ดีจริง ๆ ว่าทำไมคุณถึงเพิ่มที่NullPointerExceptionนี่อย่างชัดเจน (แทนที่จะเป็นคนอื่น)
                IllegalArgumentExceptionหรือNullPointerExceptionโต้เถียงเป็นโมฆะ การประชุม JDK เป็นแบบหลัง