This is one for the java purists I think. I recently had an issue with a method to perform a custom parsing of String values to a Boolean. A simple enough task, but for some
This also works:
static Boolean parseBoolean(String s)
{
return ("1".equals(s) ? Boolean.TRUE : ("0".equals(s) ? Boolean.FALSE : null));
}
So the reason you get an NPE is due to autoboxing because using boolean
in the ternary operator causes the result of the expression to be treated as a boolean
. And un-boxing of null
causes an NPE.
Interesting but no answer tells you why this happens in the first place.
This has to do with the ternary expression.
The compiler interprets null as a null reference to Boolean, applies the autoboxing/unboxing rules for Boolean (on a null) => you get a NullPointerException at runtime.
My suggestion? Don't return Boolean
, return boolean
and throw an exception:
static boolean parseBoolean(String s)
{
if ("1".equals(s)) return true;
if ("0".equals(s)) return false;
throw new IllegalArgumentException(s + " is not a boolean value.");
}
Adopting an approach like the above will help avoid you accidentally referencing a null Boolean
object.
See the excellent answer from NilsH to see why your original method is throwing an exception.