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