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

fla*_*ash 0 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;
}
Run Code Online (Sandbox Code Playgroud)

以下是它给我的信息: NullPointerException might be thrown as 'value' is nullable here

我已经检查了上面的空检查值,然后为什么它在里面抱怨?难道我做错了什么?

更新:

在安迪的建议之后.我改写了这样的东西:

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

And*_*ner 5

声纳很可能不理解它的语义Strings.isNullOrEmpty.

如果您将条件写为:

if (value != null) {
Run Code Online (Sandbox Code Playgroud)

如果你调用contains一个空字符串并不重要.

这个:

  if (value.contains("true")) {
    return true;
  } else {
    return false;
  }
Run Code Online (Sandbox Code Playgroud)

更容易写成

  return value.contains("true");
Run Code Online (Sandbox Code Playgroud)

总的来说,你可以这样写:

return value != null && value.contains("true");
Run Code Online (Sandbox Code Playgroud)

编辑您的更新:如果您正在使用Boolean.parseBoolean,您甚至不需要空检查.parseBoolean返回falsenull输入.

String value = getValue("/data/" + set, property);
return Boolean.parseBoolean(value);
Run Code Online (Sandbox Code Playgroud)