我有这样的代码,当我在声纳下运行它时,它总是在此行抱怨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

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

更新:

根据安迪的建议。我重写了这样的东西:

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

最佳答案

声纳很可能不理解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,则甚至不需要null检查。 parseBoolean为空输入返回false

String value = getValue("/data/" + set, property);
return Boolean.parseBoolean(value);

08-26 02:40