为什么 Java 抱怨我的 try-with-resources 块?
Why is Java complaining about my try-with-resources block?
我有一个 IncomingTrackHandlerFactory
(ith
),它分发 IncomingTrackHandler
的实例。这些实例实现 AutoCloseable
。 IncomingTrackHandler
处理数据库,并且是短暂的。每个实例仅用于几个查询然后被丢弃。
我不明白为什么第一段代码不起作用。为什么 Java 告诉我 "cannot find symbol" 对于 ith
?我只是在 try 块之前声明 ith,以便在异常严重且数据库事务必须回滚时也能够手头有 ith
变量。
我错过了什么?
据我所知,必须在 try-with-resources 块中声明资源,就像在第二个示例中所做的那样。
来自文档
Because the BufferedReader instance is declared in a try-with-resource statement, it will be closed regardless of whether the try statement completes normally or abruptly (as a result of the method BufferedReader.readLine throwing an IOException).
更多信息在这里:https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
您的 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
我有一个 IncomingTrackHandlerFactory
(ith
),它分发 IncomingTrackHandler
的实例。这些实例实现 AutoCloseable
。 IncomingTrackHandler
处理数据库,并且是短暂的。每个实例仅用于几个查询然后被丢弃。
我不明白为什么第一段代码不起作用。为什么 Java 告诉我 "cannot find symbol" 对于 ith
?我只是在 try 块之前声明 ith,以便在异常严重且数据库事务必须回滚时也能够手头有 ith
变量。
我错过了什么?
据我所知,必须在 try-with-resources 块中声明资源,就像在第二个示例中所做的那样。
来自文档
Because the BufferedReader instance is declared in a try-with-resource statement, it will be closed regardless of whether the try statement completes normally or abruptly (as a result of the method BufferedReader.readLine throwing an IOException).
更多信息在这里:https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
您的 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