抛出新的异常并立即捕获以避免代码重复。可能的?

马西亚兹

所以,基本上我有这种代码,重复发生的地方:

for (int i = 0; i < dataFromApi.size(); i++){

        try {
            returnedPoolData = dataFromApi.get(i).get();

            if(returnedPoolData == null || returnedPoolData.getJsonString().isEmpty())
                this.processAndStoreData(returnedPoolData, i, calledApis, id, true);
            else
                this.processAndStoreData(returnedPoolData, i, calledApis, id, false);

        } catch (ExecutionException e){
            log.info("" + e);
            this.processAndStoreData(returnedPoolData, i, calledApis, id, true);
        }
    }

我想通过抛出 aIllegalArgumentException并立即在 catch 块中捕获它来避免重复

所以代码看起来像:

for (int i = 0; i < dataFromApi.size(); i++){

        try {
            returnedPoolData = dataFromApi.get(i).get();

            if(returnedPoolData == null || returnedPoolData.getJsonString().isEmpty())
                throw new IllegalArgumentException("Returned data was empty.");
            else
                this.processAndStoreData(returnedPoolData, i, calledApis, id, false);

        } catch (ExecutionException e){
            log.info("" + e);
            this.processAndStoreData(returnedPoolData, i, calledApis, id, true);
        }
    }

那行得通吗?因为只要我删除ExecutionExceptionthrow new行不下划线红...

戴维xxx

IllegalArgumentException是运行时异常。
所以编译器不会限制你处理它。
我要补充一点,该ExecutionException catch语句对处理IllegalArgumentException投掷也无济于事

catch (ExecutionException e){
    log.info("" + e);
    this.processAndStoreData(returnedPoolData, i, calledApis, id, true);
}

asIllegalArgumentException不是ExecutionException.
要捕获这两个异常,您可以编写一个 catch 语句,例如:

catch (ExecutionException | IllegalArgumentException e){
   ...
}

除了正确捕获异常的方法之外,我还要补充一点,抛出异常以在同一方法中捕获它不一定是对异常的良好使用。
避免三个重复调用的另一种方法是使用布尔值,例如:

for (int i = 0; i < dataFromApi.size(); i++) {

    boolean isErrorCase = false;

    try {
        returnedPoolData = dataFromApi.get(i).get();

        if (returnedPoolData == null || returnedPoolData.getJsonString().isEmpty()) {              
            isErrorCase = true;
        }

    } catch (ExecutionException e) {
        log.info("" + e);
        isErrorCase = true;
    }

    this.processAndStoreData(returnedPoolData, i, calledApis, id, isErrorCase);

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以封装一些PHP代码以避免尝试/捕获重复?

简化 switch 语句以避免代码重复

如何编写真正的默认方法以避免代码重复

通用工厂/服务以避免Angular中的重复代码

如何重构Shell函数以避免重复代码?

继承,覆盖和虚函数,以避免重复代码

空接口访问结构属性,以避免代码重复

处理程序中的Golang抽象,以避免代码重复

CRTP 以避免代码重复:不能分配 Base=Derived by value

将方法转换为通用方法以避免重复代码

有什么方法可以避免html代码重复吗?

尝试创建通用方法以避免代码重复

XPath select中的变量以避免代码重复

将函数作为参数传递以避免重复代码

如何重构此node.js代码,以避免重复

如何压缩我的代码以避免重复for循环?

如何压缩此 jQuery 代码以避免重复?

如何制定 DRY 以避免重复代码。请不要连接

重新抛出新类型的Python异常

捕获对象在代码之前抛出的异常... c#

如何重构以避免重复?

htaccess编辑以避免重复

替换默认的未捕获异常处理程序以避免崩溃对话框

如何使此JSX代码更通用以避免在React中重复使用代码?

在 Elm 中嵌套两个 case 语句时可以避免重复代码吗?

在C#中引用表单对象,以避免重复代码块

预先设置lambda函数的一部分,以避免重复代码

有什么方法可以避免Clojure中的这种重复代码?

在超类中使用描述符以避免子类中的代码重复