我有一个IncomingTrackHandlerFactory
(ith
),它分发了IncomingTrackHandler
的实例。这些实例实现AutoCloseable
。 IncomingTrackHandler
处理数据库,并且寿命很短。每个实例仅用于几个查询,然后丢弃。
我不明白为什么第一段代码不起作用。为什么Java告诉我ith
它“找不到符号”?我只是在try块之前声明ith,以便在异常引起的情况下也可以使用ith
变量,并且必须回滚数据库事务。
我想念什么?
最佳答案
您的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/