【发布时间】:2018-04-15 11:37:52
【问题描述】:
我在 Java 的 try-with-resources 文档中找到了这个示例:
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
如果BufferedReader的构造函数抛出异常,则FileReader持有的资源不会被释放。那么这样写不是一个不好的做法,而不是:
static String readFirstLineFromFile(String path) throws IOException {
try (FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr)) {
return br.readLine();
}
}
【问题讨论】:
-
据我所知,BufferedReadet 的这个构造函数没有抛出任何异常。
-
@TobiasWeimer 第二个构造函数确实抛出了 IllegalArgumentException。
-
我知道。但根据其文档,第一个没有:docs.oracle.com/javase/9/docs/api/java/io/…
-
我的观点是,即使特定的构造函数没有抛出异常,我仍然不会将其用作教学示例,因为它忽略了与该主题相关的潜在问题。