有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java FindBugs警告删除

运行FindBugs时,我遇到以下错误:

Bug type 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());
}

由于reviewerList可以按照for循环中的FindBugs为空,因此出现错误。但我知道这永远都不会发生。删除它的一种方法是在for循环之前检查reviewerListnull,但是还有其他方法吗


共 (1) 个答案

  1. # 1 楼答案

    您可以use ^{} if you add ^{} to the classpath

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

    但是,这基本上与您将if-语句放在那里的原因相同。当添加if语句时,您会说可能是这样的,并且只有在这种情况下才会执行代码。如果始终执行If语句,则没有理由使用If语句

    因此,您还可以抑制if语句并忽略导致您添加if语句的警告

    另一种方法是将使用reviewerList的代码放在if语句中,或者在它为null时抛出异常(例如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());
    }