gpt4 book ai didi

java - 解决多个异常

转载 作者:行者123 更新时间:2023-11-30 11:24:22 26 4
gpt4 key购买 nike

我的处境很糟糕,由以下代码总结。

try {
dangerousCode(); // Declares `throws ExecutionException`
}
catch (ExecutionException ex) {
handleIt();
throw ex;
}
catch (RuntimeException ex) {
handleIt();
throw new ExecutionException(ex);
}
finally {
notifyListeners(); // May throw RuntimeException!
}

我想坚持传播从危险代码派生的潜在 ExecutionException 的契约(Contract) - 显式抛出,包装 RuntimeException .

但是,finally block 中的监听器(我无法控制) 可能会抛出另一个 运行时异常。当然,我也想把这个事件通知客户。

困境:我现在有两个异常(exception)。

我可以定义自己的异常类型来包装抛出的两个异常。

class MyExecutionException {
Throwable getCause();
Throwable getSecondCause();
}

我只是想知道,是否有其他方法可以解决这个问题?

最佳答案

I was just wondering, is there another way around this issue?

你的想法很好。将自己的类用于嵌套在 catchfinally 语句中的 try-catch 是一种常见的做法。在较大的应用程序中,此类构造几乎是不可避免的。

您的类(class)可能如下所示:

class MyExecutionException extends MyLogicException {
//what happened in the first place
Throwable getOriginException();

// what have we tried?
Throwable getRecoveryException();

// more than 1 thing can happen in recovery, order is important, hence list
List<Throwable> getAllExceptions();
}

这种方法让您可以将所有信息集中在一个地方,并使在一个地方实现异常处理和日志记录变得非常容易。只需确保您的异常包装器/容器类尽可能通用,以满足您 future 的需求。

关于java - 解决多个异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20703607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com