有 Java 编程相关的问题?

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

java如何解决findbug问题:为非Null参数传递Null

我发现以下findbugs错误:

“方法调用为非null参数传递null:为getApiStatus(ApiResponse)的非null参数传递null”

如果CallApi方法中的apiResponse为null(为了简洁起见,这里没有显示),它只会抛出一个异常,该异常在HandLeapIEException中被捕获,如果我们不能对该异常执行任何其他操作,它会再次抛出

apiResponse的null值不可能被传递到这段代码snippit底部的getApiStatus()方法中。我怎样才能告诉findbugs情况就是这样,而不在apiService中完成的空检查之上再做一次空检查呢。CallApi方法?我尝试过使用非空注释,但这并没有解决问题。下面是有问题的代码:

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

boolean apiStatus = getApiStatus(apiResponse);

有什么想法吗


共 (1) 个答案

  1. # 1 楼答案

    在代码中,无论getApiStatus(apiResponse)是否发生,都将调用ApiException

    你应该换成这个:

    try {
        ApiResponse apiResponse = apiService.CallApi(apiURL, requestObject);
        // line bellow will not execute if CallApi throws ApiException
        boolean apiStatus = getApiStatus(apiResponse);
    }
    catch (ApiException ex) {
        handleApiException(ex);
    }
    // lines bellow will execute after try-catch block above
    // regardless of the ApiException occurring or not