在方法调用时,将抛出NullPointerException。

问题描述 投票:0回答:1

我有一个简单的方法。

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,而且错误信息似乎会误导我?

java nullpointerexception sonarqube
1个回答
1
投票

你得到这个警告是因为下面这一行。

return null;

为什么你会返回 nulltag 是空白?我建议你做为。

return tag;

或者是

return "";

但是,你的功能仍然会容易出现以下情况。NullPointerException 因为 tagnull. 为避免出现以下情况: NullPointerException我建议你用下面的方法实现你的函数。

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

    return tag;
}

0
投票

如果字符串是空的,你就不能在上面调用任何方法。

trim方法会触发空指针异常。

 return tag.substring(tag.lastIndexOf('/') + 1).trim();

考虑为字符串使用一个 Optional。https:/docs.oracle.comjavase8docsapijavautilOptional.html。

© www.soinside.com 2019 - 2024. All rights reserved.