[英]Why declare Resource in try() while using try-with-resources
以下try-with-resources语句是Java Docs中的示例
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
根据文档,
try-with-resources语句可确保在语句末尾关闭每个资源。
我的问题是,为什么要在try关键字后立即在括号内声明资源。 (就像上面的BuffereReader一样)
BuffereReader实现java.lang.AutoCloseable
那为什么不支持这样的事情,
static String readFirstLineFromFile(String path) throws IOException {
try{
BufferedReader br =
new BufferedReader(new FileReader(path))
return br.readLine();
}
}
一旦尝试,就隐式关闭资源对象。 (因为它实现了AutoCloseable)
我只是有一个想法,为什么要更改语法。
请正确阅读问题,仅与语法有关。
在某些情况下,您不想立即关闭AutoCloseable
资源。 例如:
static BufferedReader getBufferedReader(String path) {
try{
FileReader fr = new FileReader(path);
return new BufferedReader(fr);
}
catch(IOException ex) {
// handle somehow
}
}
在这种情况下,您不能在try
块退出时关闭fr
。 否则,返回的BufferedReader
将无效。 因此,您应该明确指定何时要关闭资源。 这就是发明特殊语法的原因。
因为它将改变现有程序的语义。 此新功能需要新的语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.