NullPointerException может быть выброшено, поскольку 'value' обнуляется здесь - PullRequest
0 голосов
/ 30 мая 2018

У меня есть такой код, и когда я запускаю его под сонаром, он всегда жалуется на эту строку value.contains("true")

String value = getValue("/data/" + set, property);
if (!Strings.isNullOrEmpty(value)) {
  if (value.contains("true")) {
    return true;
  } else {
    return false;
  }
} else {
  return false;
}

Вот сообщение, которое он мне дает: NullPointerException might be thrown as 'value' is nullable here

Я уже проверяю значение для нулевой проверки чуть выше, тогда почему она жалуется внутри?Я что-то не так делаю?

Обновление:

После предложения Энди.Я переписал что-то вроде этого:

String value = getValue("/data/" + set, property);
if (value!=null) {
  return Boolean.parseBoolean(value);
}
return false;

1 Ответ

0 голосов
/ 30 мая 2018

Вероятно, сонар не понимает семантику Strings.isNullOrEmpty.

. Вы можете сделать его менее запутанным со всех сторон, если бы вы написали условие как:

if (value != null) {

На самом деле не имеет значения, если вы вызываете contains для пустой строки.

Кроме того, это:

  if (value.contains("true")) {
    return true;
  } else {
    return false;
  }

легче записать как

  return value.contains("true");

В целом, вы можете написать это как:

return value != null && value.contains("true");

Изменить для своего обновления: если вы используете Boolean.parseBoolean, вам даже не нужна проверка на ноль.parseBoolean возвращает false для нулевого ввода.

String value = getValue("/data/" + set, property);
return Boolean.parseBoolean(value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...