Java 方法调用时将引发NullPointerException

Java 方法调用时将引发NullPointerException,java,nullpointerexception,sonarqube,Java,Nullpointerexception,Sonarqube,我有一个简单的方法: 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.Nod

我有一个简单的方法:

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));

String tag=node.getNodeValue() 您收到此警告是因为以下行:

return null;
tag
为空时,为什么要返回
null
?我建议你这样做:

return tag;
或许

return "";
但是,您的函数仍然容易出现
NullPointerException
,因为
tag
可能是
null
。为了避免出现
NullPointerException
,我建议为您的函数实现以下功能:

public String getValue(String tag) {
    if (tag != null) {
        tag = tag.substring(tag.lastIndexOf('/') + 1).trim();
    }

    return tag;
}

如果字符串为null,则不能对其调用任何方法

trim方法将触发空指针异常:

 return tag.substring(tag.lastIndexOf('/') + 1).trim();
请考虑为字符串使用可选选项:

它们不是等价的,如果tag=“”,则返回null或“”不是相同的内容。您确定不是生成NPE的getAttribute吗?可能是在警告您,对getValue的调用可能会返回null,而getAttribute将抛出getValueWell返回的null值,这是我的问题之一:我完全不知道:(好的,检查getAttribute函数,或者将其发布到这里我知道这不是问题的一部分,但是代码中有一个逻辑错误。
String price=getAttribute(param1,param2,getValue(value));
应该是
String price=getAttribute(param1,param2,value)
。虽然你的代码可以工作,但它做的比它需要做的更多。让我们说tag=“foo/bar”然后在第二行调用获取值后,值将是“bar”。然后当你获取价格时,你调用getValue(“bar”),它将返回“bar”,但为什么要浪费计算机的时间?这回答了你的问题吗?