繁体   English   中英

为什么在使用try-with-resources时在try()中声明Resource

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM