Это одно для пуристов java, я думаю. Недавно у меня возникла проблема с методом для выполнения пользовательского синтаксического анализа значений String в Boolean. Достаточно простая задача, но по какой-то причине нижеприведенный метод бросал исключение NullPointerException в нулевом случае...
static Boolean parseBoolean(String s)
{
return ("1".equals(s) ? true : ("0".equals(s) ? false : null));
}
Тип возврата для метода является логическим, поэтому почему и как можно исключить NullPointerException? От отладки через это кажется, что исключение бросается в том месте, где вложенное операторное выражение в строке оценивается как null и возвращает значение null во внешнюю строку в строке, но опять-таки я не могу объяснить, почему.
В конце концов я сдался и переписал метод следующим образом:
static Boolean parseBoolean(String s)
{
if ("1".equals(s)) return true;
if ("0".equals(s)) return false;
return null;
}
Следующий код находится на полпути между двумя, а также работает как ожидалось:
static Boolean parseBoolean(String s)
{
if ("1".equals(s)) return true;
return "0".equals(s) ? false : null;
}