if (res.getBody() == null || res.getBody().getServiceResult() == null) {
return; //
}
在上面的代码中,sonarlint抱怨说可以抛出SonarLint:一个"NullPointerException“;"getBody()”可以返回null。(来自res.getBody().getServiceResult() )
我认为"res.getBody() == null“首先检查null,因此它应该转到返回行,而不是到达next if条件。
我是不是想错了?
发布于 2021-02-22 05:44:15
res.getBody() == null || res.getBody().getServiceResult() == null)
声纳检测到,当您检查res.getBody()
时,res.getBody()==null
可以为null。
在那之后,你又打电话给res.getBody()
。
它可能是非无效的第一次,但不是第二次,声纳不知道这一点。
为了解决这个问题,只需执行以下操作:
BodyType body=res.getBody();
if (body == null || body.getServiceResult() == null) {
return;
}
在此之后,您甚至可以重用body
。
如果您绝对确信res.getBody()
保持为空,并且也没有被另一个线程修改,则还可以使用//NOSONAR
注释来抑制警告。
发布于 2021-02-22 05:57:33
区域似乎也可以是空的。
试一试
if (res == null || res.getBody() == null || res.getBody().getServiceResult() == null) {
return; //
}
这样长的getter链也可以替换为可选+ map + ifPresent lambda样式。
https://stackoverflow.com/questions/66310483
复制相似问题