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