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

标签 java exception-handling

这是在 Java 6 上

我可以有一个通用的方法来处理我的异常吗?而不是在每个方法中都这样做 n 次

try {
    // Do something
} catch (XException e) {
    // Do something
} catch (YException e) {
    // Do something
} catch (ZException e) {
    // Do something
}

我有

try {
        // Do something
    } catch (Exception e) {
        handleAll (e);
    }

方法handleAll(e)

if e.instanceOf(XException)

else if e.instanceOf(YException)

else if e.instanceOf(ZException)

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

更新:

我最初的问题是关于在一个地方为检查异常和运行时异常“集中处理”。答案已经指出我应该避免 instanceof()。

@aioobe 的想法在我看来非常巧妙。对该方法有任何负面意见吗?

最佳答案

据我所知,有一个小问题。由于您确实希望 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) {
        ...
    }
}

关于java - 处理多个异常的通用/集中方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6909920/

相关文章:

web-services - Web 服务是否应该抛出异常或结果对象

java - 如何找到错误 TCP 连接的原因

java - 在 android 库项目中使用 Dagger2 在运行时抛出 `NoClassDefFoundError`

java - 反射可以改变字段的声明类型吗

c# - "using"语句是 "bad code"吗?

Ruby 挽救除 MyException 之外的所有异常

ios - 在 swift 4 中使用 NSSetUncaughtExceptionHandler

java - 从索引号导出数字金字塔的数量

java - Spika-Android : "Can' t connect to server"

visual-studio-2010 - 带有 xUnit、Assert.Throws 和 "Exception was unhandled by user code"的 Visual Studio