NullPointerException from Boolean

后端 未结 3 1331
独厮守ぢ
独厮守ぢ 2021-01-08 00:26

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

相关标签:
3条回答
  • 2021-01-08 01:08

    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.

    0 讨论(0)
  • 2021-01-08 01:12

    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.

    0 讨论(0)
  • 2021-01-08 01:22

    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.

    0 讨论(0)
提交回复
热议问题