When reading JDK source code, I find it common that the author will check the parameters if they are null and then throw new NullPointerException() manually. Why do they do
It is for clarity, consistency, and to prevent extra, unnecessary work from being performed.
Consider what would happen if there wasn't a guard clause at the top of the method. It would always call hash(key)
and getNode(hash, key)
even when null
had been passed in for the remappingFunction
before the NPE was thrown.
Even worse, if the if
condition is false
then we take the else
branch, which doesn't use the remappingFunction
at all, which means the method doesn't always throw NPE when a null
is passed; whether it does depends on the state of the map.
Both scenarios are bad. If null
is not a valid value for remappingFunction
the method should consistently throw an exception regardless of the internal state of the object at the time of the call, and it should do so without doing unnecessary work that is pointless given that it is just going to throw. Finally, it is a good principle of clean, clear code to have the guard right up front so that anyone reviewing the source code can readily see that it will do so.
Even if the exception were currently thrown by every branch of code, it is possible that a future revision of the code would change that. Performing the check at the beginning ensures it will definitely be performed.