[英]Handle exception without try/catch
我有一个方法,抛出的异常必须由调用方处理,而不是由方法本身处理(签名中指定的异常,而不是主体中指定的异常)。 但是,如果发生了一些不好的情况,我想在调用者不得不处理该问题之前,使用类似于finally
语句的方法来关闭我的阅读器。
在当前配置中,如果触发了异常,则读取器保持打开状态。
private static void executeFile(Connection c, String fileName) throws SQLException, IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), Charset.defaultCharset())); // $JL-I18N$
/*
Lot of stuff happen here, and might trigger exceptions
*/
reader.close();
}
有没有办法处理这种情况? 还是应该重构该方法以单独处理异常?
编辑
评论中提供了一些很好的技巧。 我最终选择考虑的解决方案是提取触发警告的代码并使用try-with-resources。
这就是你的做法。 使用try-with-resources。
private static void executeFile(Connection c, String fileName)
throws SQLException, IOException {
try (InputStream is = new FileInputStream(fileName);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr)) {
/* Lots of stuff */
}
}
在try块中引发的异常将被传播,并且阅读器堆栈将被关闭。 如果(假设)由try-with-resource执行的隐式close()
抛出异常:
注意,我已经重写了`
new InputStreamReader(is, Charset.defaultCharset())
如
new InputStreamReader(is)
因为它们是等效的:请检查javadoc。 另一个重写只是为了提高可读性,尽管它确实说明了“尝试使用资源”可以管理多个资源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.