首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何处理Sonarlint java:S 2259(不应取消空指针)

如何处理Sonarlint java:S 2259(不应取消空指针)
EN

Stack Overflow用户
提问于 2021-02-22 05:33:12
回答 2查看 2.7K关注 0票数 3
代码语言:javascript
运行
复制
if (res.getBody() == null || res.getBody().getServiceResult() == null) {
  return; //
}

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

我认为"res.getBody() == null“首先检查null,因此它应该转到返回行,而不是到达next if条件。

我是不是想错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-22 05:44:15

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

声纳检测到,当您检查res.getBody()时,res.getBody()==null可以为null。

在那之后,你又打电话给res.getBody()

它可能是非无效的第一次,但不是第二次,声纳不知道这一点。

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

代码语言:javascript
运行
复制
BodyType body=res.getBody();
if (body == null || body.getServiceResult() == null) {
  return;
}

在此之后,您甚至可以重用body

如果您绝对确信res.getBody()保持为空,并且也没有被另一个线程修改,则还可以使用//NOSONAR注释来抑制警告。

票数 5
EN

Stack Overflow用户

发布于 2021-02-22 05:57:33

区域似乎也可以是空的。

试一试

代码语言:javascript
运行
复制
if (res == null || res.getBody() == null || res.getBody().getServiceResult() == null) {
  return; //
}

这样长的getter链也可以替换为可选+ map + ifPresent lambda样式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66310483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档