【发布时间】:2014-10-19 06:16:18
【问题描述】:
我读到 try-with-resources 中的 catch 块是可选的。
我尝试在 try-with-resources 块中创建 Connection 对象,没有后续的 catch 块,只是为了从 eclipse 中获取编译器错误:
“由自动 close() 调用引发的未处理的异常类型 SQLException。”
由于可以在 try-with-resources 中使用的每个资源都实现了AutoCloseable,因此在调用close() 方法时可能会引发异常,我不明白catch 子句如何是可选的,鉴于它不允许我跳过从close() 捕获异常。
是否有特殊要求AutoCloseable的具体实现不直接声明其close()方法中抛出的异常? (例如,用不会抛出任何异常的close() 覆盖AutoCloseable 的close() throws Exception)?
..或者这可能只是一个日食问题?
编辑:这是仍然触发问题的最简单的代码片段:
try (Connection con = dataSource.getConnection()) {
/*...*/
}
关于这是否与使用 JNDI 数据源有关的想法?
提前致谢。
【问题讨论】:
-
尝试在没有Eclipse的命令行下编译
-
您可以提供一个不会抛出异常的
AutoClosable实现,在这种情况下您不需要捕获任何东西,或者您可以在您的方法签名中添加一个throws子句,在这种情况下您不需要catch子句。 -
感谢 Edwin 的回答和关于包含方法抛出的注释。我忘记了这样做会使 try 语句不必捕获异常。
标签: java try-with-resources autocloseable