Java FindBugs警告删除
运行FindBugs时,我遇到以下错误: 错误类型NP\u NULL\u在某个路径上 给出错误的代码如下:Java FindBugs警告删除,java,spring-boot,gradle,compilation,findbugs,Java,Spring Boot,Gradle,Compilation,Findbugs,运行FindBugs时,我遇到以下错误: 错误类型NP\u NULL\u在某个路径上 给出错误的代码如下: List-reviewerList=null; response=restAPI CAll//假设某个rest调用。 reviewerListDto=response.getBody()//它从不返回null //添加此检查是因为查找错误,否则它将不允许访问getReviewers()方法 如果(reviewerListDto!=null){ reviewerList=reviewerLi
List-reviewerList=null;
response=restAPI CAll//假设某个rest调用。
reviewerListDto=response.getBody()//它从不返回null
//添加此检查是因为查找错误,否则它将不允许访问getReviewers()方法
如果(reviewerListDto!=null){
reviewerList=reviewerListDto.getReviewers();
}
//这就是我被卡住的地方
对于(请求审阅者:审阅者列表){
reviewer.setPullrequestId(pullrequest.getId());
reviewer.setRepositoryId(pullrequest.getRepositoryId());
}
根据for循环中的FindBugs,该错误是因为审阅者列表可以为空。但我知道它永远不会是空的。删除它的一种方法是在for循环之前检查reviewerList
是否为null
,但还有其他方法吗?您可以:
@SuppressFBWarnings(value=“NP\u NULL\u在某些路径上”,justification=“这永远不能为NULL”)
但是,这基本上与您将if
-语句放在那里的原因相同。当添加if语句时,您会说可能是这样的,并且只有在这种情况下才会执行代码。如果始终执行If语句,则没有理由使用If语句
因此,您还可以抑制if语句并忽略导致您添加if语句的警告
另一种方法是使用reviewerList
将代码放入if语句中,或者如果异常为null(或者立即使用assert
),则抛出异常(例如AssertionError
)
List-reviewerList=null;
//response=restAPI CAll//假设某个rest调用。
reviewerListDto=response.getBody()//它从不返回null
断言你的名字=无效的
reviewerList=reviewerListDto.getReviewers();
对于(请求审阅者:审阅者列表){
reviewer.setPullrequestId(pullrequest.getId());
reviewer.setRepositoryId(pullrequest.getRepositoryId());
}
reviewerList
如果reviewerListDto
等于null
是,则将保持null
状态,但reviewerListDto将永远不会为null。我补充说,如果条件是eviewerListDto=null因为find bug警告。我相信通过添加if(reviewerListDto!=null){
您是在指示Findbugs响应。getBody
实际上可以返回null
。但是如果我不输入if,那么我就无法访问ListReviewerdTo.getReviewers();因为它认为它可以NPE这里的好做法是什么?对我来说,它是检查空列表,而不是断言和抑制。如果检查空,你应该使用reviewerList
将代码也放在If
中,并考虑如果它为空会发生什么。