Java:如何重构这种try-catch block ?

标签 java refactoring try-catch pmd

PMD 报告“正在对捕获的异常执行 instanceof 检查。为此异常类型创建一个单独的 catch 子句。”对于下面的代码。

    String parameter;
    try {
        ...
    } catch (Exception e) {
        logFailure(e, parameter);

        if (e instanceof X) {
            throw new A(e);
        } else if (e instanceof Y
                || e instanceof Z) {
            throw new B(e);
        } 
        throw new InternalServerErrorException(e);
    }

如果我将上面的代码更改为下面的代码,logFailure(e) 有 3 个重复,是否有更好的方法来消除这种 PMD 违规?

    String parameter;
    try {
        ...
    } catch (X e) {
        logFailure(e, parameter);
        throw new A(e);
    } catch (Y e) {
        logFailure(e);
        throw new B(e);
    } catch (Z e) {
        logFailure(e);
        throw new B(e);
    } catch (exception e) {
        logFailure(e);
        throw new InternalServerErrorException(e);
    }

最佳答案

    String parameter;
    try {
        ...
    } catch (Exception e) {
        logFailure(e, parameter);
        throwException(e);
    }

    public void throwException(Exception e) throws Exception{
       if (e instanceof X) {
            throw new A(e);
        } else if (e instanceof Y
                || e instanceof Z) {
            throw new B(e);
        } 
        throw new InternalServerErrorException(e);
    }

此外,您可以将Logger 移动到此方法,具体取决于您的设计/应用

关于Java:如何重构这种try-catch block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742219/

相关文章:

java - 如何在splunk通⽤转发器上进行自己的加密和解密

java - 在 java 上通过模 m 实现的斐波那契数给出除法的负余数

java - Emacs:设置java模式本地的键。

Java Facade模式的结构变化

ios - 我在哪里可以查看大型 iOS 代码库以了解其组织方式?

java - 重新抛出异常而不在声明中添加 throws

java - 在java中的AWS lambda函数中包含访问控制 header

json - jq : continue parsing ignoring invalid literals

python - FileNotFoundError "try .. except IOError"未捕获时如何处理?

refactoring - GraphQL 中的多个 rootQuery 对象