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

DKW*_*Woo 5 java sonarlint-intellij

if (res.getBody() == null || res.getBody().getServiceResult() == null) {
  return; //
}
Run Code Online (Sandbox Code Playgroud)

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

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

我是不是在想什么问题?

dan*_*1st 6

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

res.getBody()当您进行检查时,声纳检测到该值可能为空res.getBody()==null

之后,你res.getBody()再打电话。

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

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

BodyType body=res.getBody();
if (body == null || body.getServiceResult() == null) {
  return;
}
Run Code Online (Sandbox Code Playgroud)

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

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