【问题标题】:FindBugs Warning removalFindBugs 警告删除
【发布时间】:2021-08-18 21:06:54
【问题描述】:

运行 FindBugs 时出现以下错误:

错误类型 NP_NULL_ON_SOME_PATH。

给出错误的代码如下:

List<Request> reviewerList = null;
    
response = restAPI CAll // assume some rest call.
reviewerListDto = response.getBody(); //it never returns null

// this check is added because of find bugs, else it wont allow to access getReviewers() method 
if (reviewerListDto!=null) { 
    reviewerList = reviewerListDto.getReviewers();
}
// HERE is the point I am stuck 
for (Request reviewer : reviewerList) {
    reviewer.setPullrequestId(pullrequest.getId());
    reviewer.setRepositoryId(pullrequest.getRepositoryId());
}

错误即将到来,因为根据 for 循环中的 FindBugs,reviewerList 可以为空。但我知道它永远不会是null。删除它的一种方法是在 for 循环之前检查 reviewerList 是否为 null,但是还有其他方法吗?

【问题讨论】:

  • reviewerList 保持 null 如果 reviewerListDto 等于 null
  • 是的,但 reviewerListDto 永远不会为空。我补充说如果条件 eviewerListDto!=null 因为发现错误警告
  • 我相信,通过添加 if(reviewerListDto!=null) {,您是在指示 Findbugs,response.getBody 实际上可以返回 null
  • 但如果我不输入 if,那么我将无法访问 reviewerListDto.getReviewers();因为它认为它可以是 NPE

标签: java spring-boot gradle compilation findbugs


【解决方案1】:

你可以use @SuppressFBWarnings if you add com.google.code.findbugs:annotations to the classpath:

@SuppressFBWarnings(value="NP_NULL_ON_SOME_PATH", justification="This can never be null")

但是,这与您将if-statement 放在那里的原因基本相同。添加 if 语句时,您说可能是这种情况,并且仅在发生这种情况时才执行代码。如果总是执行 if 语句,则没有理由使用 if 语句。

因此,您也可以禁止 if 语句并忽略导致您添加 if 语句的警告。

另一种方法是将使用 reviewerList 的代码放入 if 语句中,或者如果它为空则抛出异常(例如 AssertionError)(或立即使用 assert)。

List<Request> reviewerList = null;
// response = restAPI CAll // assume some rest call.
reviewerListDto = response.getBody(); //it never returns null
assert reviewerListDto!=null;
reviewerList = reviewerListDto.getReviewers();
for (Request reviewer : reviewerList) {
    reviewer.setPullrequestId(pullrequest.getId());
    reviewer.setRepositoryId(pullrequest.getRepositoryId());
}

【讨论】:

  • 这里有什么好的做法?对我来说,检查列表是否为 null 而不是断言和抑制。
  • 如果你检查null,你应该把使用reviewerList的代码放在if中,并且想想如果它为null会发生什么。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
相关资源
最近更新 更多