当前位置: 首页 > 知识库问答 >
问题:

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

鲜于海
2023-03-14

我得到以下findbugs错误:

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

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

在这段代码片段的基础上,apiACK的空值不可能传递给getApistatus()方法。我如何告诉findbugs情况就是这样,而不在apiService中完成的空检查之上进行另一次空检查。CallApi方法?我尝试过使用NonNull注释,但这并不能解决问题。这是有问题的代码:

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

boolean apiStatus = getApiStatus(apiResponse);

有什么想法吗?

共有3个答案

汲永嘉
2023-03-14

如果CallApi抛出异常,那么它将被处理,控制将继续getApiStatus,而apiResponse除了最初的null之外,不会被分配任何内容。

纪实
2023-03-14

在您的代码中,无论是否发生ApiException,都会调用getApistatus(apiACK)

你应该用这个代替:

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
万阳嘉
2023-03-14

我的建议是不处理异常,而是将此方法设置为异常。然后把它放在链条的上面。如果您的代码在该try块中获得一个exeption,然后在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块内apiResponse调用的下面,如下所示:

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

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

 类似资料:
  • 我想从'get codepage'传递2个参数到'mainpage',然后我出现了这个错误。这是我的getCodePage我传递参数的部分: 当我想将参数作为对象时,这是我的主页: 那么这里有一个错误:没有为类型“object”flutter error定义运算符“[]”

  • 本文向大家介绍解决Python传递中文参数的问题,包括了解决Python传递中文参数的问题的使用技巧和注意事项,需要的朋友参考一下 今天有个需要需要传递中文参数给URL 但是在GBK环境下的脚本传递GBK的参数老是给我报UNICODE的解码错误。烦的很。 所以我们果断选择用urlencode来处理中文, 由于国内外网站编码不同,国内是GBK的,国外是UTF8的。 这样我就得到了GBK的url编码,

  • 这个问题的解决方案是什么?问题在这里,代码在这里: > 列表项 在BindViewHolder上公开无效(@nonNull HolderOrderShop持有人,int位置){ //转换时间日历=日历。getInstance();日历setTimeInMillis(Long.parseLong(orderTime));String formattedate=DateFormat。格式(“日/月/年

  • 问题内容: 下面的程序引发NullPointerException。在Log cat中,它显示: 单击该按钮时,它不会进入Mousefragment类。我试图解决它,但是我不能-如何解决这个问题? 编辑 单击该按钮多少次,该异常随同invalid_ip Toast消息一起显示 问题答案: 如前所述,您的问题询问如何解决此问题。 您需要弄清楚在哪里抛出。为此,请查看堆栈跟踪以查看引起问题的行。然后,

  • 本文向大家介绍解决PHP使用CURL发送GET请求时传递参数的问题,包括了解决PHP使用CURL发送GET请求时传递参数的问题的使用技巧和注意事项,需要的朋友参考一下 最近在使用curl发送get请求的时候发现传递参数一直没有生效,也没有返回值,以为是自己哪里写错了,网上找东西时也没有人专门来说get请求传递参数的内容,所以,今天在这里记录一下,希望可以帮到一些人 get请求是最简单的请求,不过要

  • 单点登录操作流程:客户单通过携带值得url路径跳转,白名单界面通过url中得id,key请求后端数据渲染界面。 浏览器URL中输入 http://localhost:8088/taxBureauLogin?id=1206&key=zE9+TICzsrej... 浏览器转义为 http://localhost:8088/taxBureauLoginid=1206&key=zE9%20TICzsre.