【发布时间】:2011-12-04 15:19:05
【问题描述】:
我想建立一个自定义的AutoCloseable 类,这样我就可以转这个:
try {
begin();
doThings();
commit();
} finally {
if (transactionIsActive()) rollback();
}
变得更容易
try (Transaction t = begin()) { // too bad I have to store it in t though I don't use it
doThings();
}
Transaction 将是此处的AutoCloseable,在close() 中它将酌情提交或回滚事务。
但要使其正常工作,我需要在 Transaction.close() 中检测 try 块内是否发生异常或正常完成。这可能吗?
如果它需要从新异常中解析堆栈跟踪,那没关系。更简单的编程将值得带来微小的性能损失。
【问题讨论】:
-
我相信 try-with-resources 专门用于处理资源的设置和清理本身引发异常的情况,从而导致可怕的
finally { try { if (resource != null) { resource.close() …块。它不应该是 Python 的上下文管理器。 -
@Inerdial 也许,但如果可能的话(这个问题希望能显示出来)我不反对为了这样的目的滥用它们。
-
“特别”是指我浏览了规范,据我所知,所发生的只是生成了与设置/清理块相对应的字节码,only i> 您可以将其作为初始化程序和
AutoCloseable.close的实现挂钩的点,它们都不接受异常参数。
标签: java exception-handling transactions java-7