处理多个异常的通用/集中方法

shi*_*ike 5 java exception-handling

这是在Java 6上

我可以有一个通用的方法来处理我的异常 - 所以不要在每个方法中执行n次

try {
    // Do something
} catch (XException e) {
    // Do something
} catch (YException e) {
    // Do something
} catch (ZException e) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

我有

try {
        // Do something
    } catch (Exception e) {
        handleAll (e);
    }
Run Code Online (Sandbox Code Playgroud)

和方法handleAll(e)

if e.instanceOf(XException)

else if e.instanceOf(YException)

else if e.instanceOf(ZException)
Run Code Online (Sandbox Code Playgroud)

第二种方法有什么问题吗?

更新:

我最初的问题是关于"集中处理"在一个地方对于检查和运行时异常.答案指出我应该避免使用instanceof().

@ aioobe的想法看起来很整洁.对这种方法有任何负面意见吗?

aio*_*obe 4

我认为有一个小问题。由于您确实希望该handleAll方法重新抛出任何未捕获的异常,因此必须声明它throws Exception。这意味着调用handleAll.

如果X-Y-ZException都是RuntimeExceptions我认为这没有什么问题。(不过,我可能忽略了一些事情,因为这是我第一次看到这种方法。)

为了确保该instanceof方法的行为与 catch 子句完全相同,我会考虑handleAll(RuntimeException e)这样设计:

private void handleAll(RuntimeException e) {
    try {
        throw e;
    } catch (XException xe) {
        ...
    } catch (YException xe) {
        ...
    } catch (ZException xe) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)