我有这样的代码,当我在声纳下运行它时,它总是在这条线上抱怨 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)
声纳很可能不理解它的语义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)