我读到try-with-resources中的catch
块是可选的。我试图在try-with-resources块中创建一个Connection
对象,并没有后续的catch
块,结果从eclipse编译器得到了错误提示:"Unhandled exception type SQLException
thrown by automatic close()
invocation."。
由于每个可以在try-with-resources中使用的资源都实现了AutoCloseable
接口,并且在调用close()
方法时可能会抛出异常,因此我不明白为什么在不捕获close()
方法引发的异常的情况下可以省略catch
子句。既然它不允许我跳过捕获来自close()
的异常,那么为什么catch
子句是可选的?
是否有一些特殊要求,即AutoCloseable
的具体实现不能直接声明其close()
方法抛出的任何异常?例如,用不抛出任何异常的close()
重写AutoCloseable
的close() throws Exception
?
或者这可能只是一个eclipse问题吗?
编辑:这里是最简单的代码片段,仍然会触发该问题:
try (Connection con = dataSource.getConnection()) {
/*...*/
}
请问这是否与使用 JNDI 数据源有关?
提前感谢。
AutoClosable
实现,它不会抛出异常,这样您就不需要捕获任何东西,或者您可以在方法签名中添加一个throws
子句,这样您就不需要一个catch
子句。 - Edwin Dalorzo