1

我有以下代码

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

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

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

我关注了这个链接,但不明白如何传递和抛出正确的异常。

4

4 回答 4

7

如果使用 Java 7,您可以使用新的管道语法

catch (Exception1|Exception2 e)
{
  if(condition) {
    //code
  } else {
    throw e;
  }
}
于 2013-05-28T22:18:57.010 回答
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;
    }
}
于 2013-05-28T22:18:33.950 回答
2

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

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

然后在你的捕获中调用它

try {
        // code
    } catch (Exception1 e1) {
        method(e1);
    } catch (Exception2 e2) {
        method(e2);
    }
于 2013-05-28T22:18:06.193 回答
0

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

Java 7 中的更改列表

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

于 2013-05-28T22:20:25.387 回答