gpt4 book ai didi

java - 如何解决 findbug 问题 : Null passed for nonnull parameter

转载 作者:行者123 更新时间:2023-12-02 09:43:13 25 4
gpt4 key购买 nike

我收到以下 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);

有什么想法吗?

最佳答案

我的建议是不处理异常,而是将此方法设置为抛出 ApiException。然后在链条的更高层处理它。如果您的代码在该 try block 中获取异常,然后在 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.
}

您唯一的其他选择是将 apiStatus 调用放在 try block 内的 apiResponse 调用下方,如下所示:

ApiResponse apiResponse = null;
try {
apiResponse = apiService.CallApi(apiURL, requestObject);
boolean apiStatus = getApiStatus(apiResponse);
} catch (ApiException ex) {
handleApiException(ex);
}

或者,正如您所说,在调用 getApiStatus 之前进行空检查,但这并不像上面的选项那么好。

关于java - 如何解决 findbug 问题 : Null passed for nonnull parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36509666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com