【发布时间】:2011-03-30 21:33:10
【问题描述】:
只是一个注释:
我知道在 Java 中 finally 块永远不应该抛出异常,否则这是 [非常、非常、非常] 不好的做法。
我知道我应该在finally 中使用try-catch 来处理(例如记录或忽略)所有异常并防止它们传播。
我知道 Java 7 的 Throwable 有 getSuppressed 方法,但我的目标是 Java 5 和 6。
问题:在 Java 中,在 try-finally 中,如果 try 块抛出异常(将其命名为 A),控制到达 finally 块(在没有异常的情况下它到达它也,但这个问题并不有趣)。然后,如果finally 块抛出异常(将其命名为B),异常A 被抑制,或被屏蔽/吞没,异常B传播给调用者。
问题:当一个异常被另一个异常抑制并记录/记录第一个异常时,我能否以某种方式检测到这种情况?
...我花了太多时间来推理为什么会抛出特定的异常,却不知道到底发生了什么。
理由:经常有问题的 try-finally 块被编码在一个库中(今天它是 Hibernate),所以我无法修改它们。
解决方案限制:正如我在开始时指出的那样,可能的解决方案不应该依赖于 Java 7,但另一方面,不需要是生产级的(如果是这样将是一个奖励)。 AOP 是这里的一个选项。
(请不要发布类似“使用 Java 7 进行开发”之类的琐碎答案:)
【问题讨论】:
标签: java debugging exception finally