java - 在多个catch块中管理重复代码

时间:2013-05-28 22:14:30

标签: java exception

我有以下代码

    try {
        // code
    } catch (Exception1 e1) {
        if (condition) {
            //code
        } else {
            throw e1;
        }
    } catch (Exception2 e2) {
        if (condition) {
            //code
        } else {
            throw e2;
        }
    }

如何使用私有方法在两个catch中模块化if-else块。

更具体地说,如果我使用一种方法如何将不同的异常传递给方法并适当地抛出它们?

我遵循了这个link,但不明白如何传递和抛出正确的异常。

4 个答案:

答案 0 :(得分:7)

如果使用Java 7,您可以使用新的pipe syntax

catch (Exception1|Exception2 e)
{
  if(condition) {
    //code
  } else {
    throw e;
  }
}

答案 1 :(得分:2)

有多种方法,一种简单的方法可以将方法定义为:

private void method(Exception e){
if (condition) {
            //code
        } else {
            throw e1;
        }
}

然后在你的捕获中调用它

try {
        // code
    } catch (Exception1 e1) {
        method(e1);
    } catch (Exception2 e2) {
        method(e2);
    }

答案 2 :(得分:2)

这就像将if/else放在方法中一样简单。

try {
    // code
} catch (Exception1 e1) {
    logic(e1);
} catch (Exception2 e2) {
    logic(e2);
}


private void logic(Exception e) throws Exception {
    if (condition) {
        //code
    } else {
        throw e;
    }
}

答案 3 :(得分:0)

你想要确保在人们发布的答案中做的唯一事情就是你需要把Exception1放在Exception2的超类中,否则不能编译。 下面的Java 7答案是处理它和订购问题的最佳方式,正如我解释的那样

Java 7中的更改列表

http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html