我有一个简单的方法。
public String getValue(String tag) {
if (StringUtils.isBlank(tag)) {
return null;
}
return tag.substring(tag.lastIndexOf('/') + 1).trim();
}
然后像这样被调用
String tag = node.getNodeValue(); <-- from org.w3c.dom.Node
String value = getValue(tag);
String price = getAttribute(param1, param2, getValue(value));
SonarQube警告我一个NullPointerException:
当调用 "getValue() "方法时,将抛出 "NullPointerException" <--第二次调用。
然而,我看不出如何。这个方法本身就是无效的。到底发生了什么?是不是SonarQube无法走到下面的程序?StringUtils.isBlank
方法?或者是 getAttribute()
方法会给我NullPointerException,而且错误信息似乎会误导我?
你得到这个警告是因为下面这一行。
return null;
为什么你会返回 null
当 tag
是空白?我建议你做为。
return tag;
或者是
return "";
但是,你的功能仍然会容易出现以下情况。NullPointerException
因为 tag
可 null
. 为避免出现以下情况: NullPointerException
我建议你用下面的方法实现你的函数。
public String getValue(String tag) {
if (tag != null) {
tag = tag.substring(tag.lastIndexOf('/') + 1).trim();
}
return tag;
}
如果字符串是空的,你就不能在上面调用任何方法。
trim方法会触发空指针异常。
return tag.substring(tag.lastIndexOf('/') + 1).trim();
考虑为字符串使用一个 Optional。https:/docs.oracle.comjavase8docsapijavautilOptional.html。