sonarqube向我报告此错误: A "NullPointerException" could be thrown; "getBody()" can return null.
代码如下:
if (holdingResponseEntity == null || holdingResponseEntity.getBody() == null || holdingResponseEntity.getBody().getError() || holdingResponseEntity.getBody().getResult() == null) { throw new HoldingNotFoundException("Holding whit id=" + idHolding + " not found-"); }
3条答案
按热度按时间eit6fx6z1#
不过,也有其他方法来解决这个问题,正如上面所回答的,但如果我想解决它的方式,你写的代码与最小的变化,避免从声纳警告,这将是如下所示-
使用&&operator将确保一旦条件失败,它不会检查后续条件,从而解决问题。
kb5ga3dv2#
从理论上讲,一次又一次的呼叫
getBody()
可能返回其他值。以下利用hasBody()
还有电话getBody()
只有一次。通常您应该检查库的源代码
getBody
. 我猜:它不是一个简单的获得者,而是一次构造身体。因为有一个hasBody
.这样的事情使得代码检查器很有价值。
dgiusagp3#
你先测试一下
getBody()
退货null
.sonarqube看到了这一点,认为该方法可以返回null。
然后,再次调用相同的方法。sonarqube只知道该方法可以返回null,因此它会告诉您警告。
换句话说,sonarqube认为它可以返回与
null
第一次却回来了null
第二次。如果方法只是一个简单的getter,并且对象没有并发修改,那么这就没有问题了。
要删除警告,可以执行以下操作之一:
保存的结果
getBody()
对于一个变量,检查它是否为null,如果不是则继续添加
//NOSONAR
你应该知道自己在做什么。请注意,如果您决定使用第二种情况,您可能需要在注解中解释为什么这是可以的。