可能会抛出NullPointerException,因为'value'可以在这里声纳为声纳警告

时间:2018-05-29 22:37:26

标签: java sonarqube

我有这样的代码,当我在声纳下运行它时,它总是抱怨这一行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 :(得分:5)

声纳很可能不理解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);