我有一个IncomingTrackHandlerFactoryith),它分发了IncomingTrackHandler的实例。这些实例实现AutoCloseableIncomingTrackHandler处理数据库,并且寿命很短。每个实例仅用于几个查询,然后丢弃。

我不明白为什么第一段代码不起作用。为什么Java告诉我ith它“找不到符号”?我只是在try块之前声明ith,以便在异常引起的情况下也可以使用ith变量,并且必须回滚数据库事务。

我想念什么?



java - 为什么Java提示我的try-with-resources块?-LMLPHP



java - 为什么Java提示我的try-with-resources块?-LMLPHP

最佳答案

您的ith对象仅在try块内部可见,并且是AutoCloseable的实例。该实例在外部不可见,在catch,finally或catch块中均不可见。抛出异常或完成ith块后,try资源将自动关闭。尽管您可以捕获异常本身,但是不能对ith对象本身进行操作,只能在try块内部。

要使用rollback函数,必须在其中声明另一个try-catch块。 (由于源代码为图像格式,因此省略了原始代码示例)

try(Object<AutoCloseable> smth = source.get())
{
   try {
       // operate on smth
   } catch (Exception e)
   {
      smth.rollback();
   }
}


有关更多信息,请检查https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

关于java - 为什么Java提示我的try-with-resources块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42762769/

10-14 04:48