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 सम्मेलन उत्तरार्द्ध है।