微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何处理 Sonarlint java:S2259不应取消引用空指针

如何解决如何处理 Sonarlint java:S2259不应取消引用空指针

if (res.getBody() == null || res.getBody().getServiceResult() == null) {
  return; //
}

在上面的代码中, sonarlint 抱怨说 SonarLint:可能会抛出“NullPointerException”; “getBody()”可以返回空值。 (来自 res.getBody().getServiceResult() )

我认为“res.getBody() == null”首先检查null,所以它应该去返回行,而不是到达下一个条件。

我是不是想错了?

解决方法

res.getBody() == null || res.getBody().getServiceResult() == null)

Sonar 在您检查 res.getBody() 时检测到 res.getBody()==null 可以为空。

之后,您再次调用 res.getBody()

第一次可能是非空但第二次不是,声纳不知道这一点。

为了解决这个问题,只需执行以下操作:

BodyType body=res.getBody();
if (body == null || body.getServiceResult() == null) {
  return;
}

之后您甚至可以重复使用 body

如果您绝对确定 res.getBody() 保持 null 并且也没有被其他线程修改,您还可以使用 //NOSONAR 注释来抑制警告。

,

似乎 res 也可以为 null。

试试

if (res == null || res.getBody() == null || res.getBody().getServiceResult() == null) {
  return; //
}

这么长的 getter 链也可以用 Optional + map + ifPresent lambda 样式替换。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。