首页 > 解决方案 > 声纳:由于被调用方法的返回值,可能的空指针取消引用

问题描述

if (response != null && response.getBody() != null && response.getStatusCode() == HttpStatus.OK) {
        return new BigDecimal(response.getBody());
}

由于上述代码中调用方法的返回值,我可能会取消引用空指针。

有人可以让我知道确切的问题以及为什么会出现问题吗?

response.getBody() // returns a string value

提前致谢!如果需要任何其他详细信息,请告诉我。

标签: javasonarqube

解决方案


Sonar 不知道连续两次调用getBody()会返回相同的值。

因此,从静态分析器的角度来看,第二次调用确实有可能返回null.

我建议将主体分配给局部变量,并且只调用一次 getter。是来自 Sonar 社区的参考资料,其中有人将此行为报告为错误并收到了类似的回复。

静态分析器实际上无法证明这两个调用将返回相同的值,除非response是最终的和不可变的类型。而且我尝试过的任何静态分析器都没有尝试证明这一点。


推荐阅读