gre*_*Dev 5 java null findbugs
我收到以下 findbugs 错误:
“方法调用为非空参数传递空值:为 getApiStatus(ApiResponse) 的非空参数传递空值”
如果 CallApi 方法中的 apiResponse 为 null(为简洁起见,此处未显示),它只会抛出一个异常,该异常会在handleApiException 中捕获,并且如果我们无法对该异常执行任何其他操作,则会再次抛出该异常。
无法将 apiResponse 的空值传递到此代码片段底部的 getApiStatus() 方法中。如何在 apiService.CallApi 方法中执行的 null 检查之上不进行另一个 null 检查的情况下告诉 findbugs 是这种情况?我尝试过使用 NonNull 注释,但这并没有解决问题。这是有问题的代码:
ApiResponse apiResponse = null;
try {
apiResponse = apiService.CallApi(apiURL, requestObject);
}
catch (ApiException ex) {
handleApiException(ex);
}
boolean apiStatus = getApiStatus(apiResponse);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我的建议是不处理异常,而是将此方法设置为抛出 ApiException。然后在链条的更高层处理它。如果您的代码在该 try 块中获取异常,然后在 catch 中处理该异常,则 apiResponse 很容易为 null。然后将继续尝试 getApiStatus 方法,因此传入 null。
public void yourMethod() throws ApiException {
ApiResponse apiResponse = apiService.CallApi(apiURL, requestObject);
boolean apiStatus = getApiStatus(apiResponse);
// Whatever else you need to do here.
}
Run Code Online (Sandbox Code Playgroud)
您唯一的其他选择是将 apiStatus 调用放在 try 块内的 apiResponse 调用下方,如下所示:
ApiResponse apiResponse = null;
try {
apiResponse = apiService.CallApi(apiURL, requestObject);
boolean apiStatus = getApiStatus(apiResponse);
} catch (ApiException ex) {
handleApiException(ex);
}
Run Code Online (Sandbox Code Playgroud)
或者,正如您所说,在调用 getApiStatus 之前进行空检查,但这并不像上面的选项那么好。
| 归档时间: |
|
| 查看次数: |
13881 次 |
| 最近记录: |