关于尝试资源声明的询问

时间:2013-08-05 08:39:53

标签: java resources try-catch

只是确认以下内容没有编译,这不是我的错误:

try(Files.newBufferedWriter(Paths.get("/home/user/Desktop/TryItOutMan.txt"), Charset.defaultCharset())
        {
        }
        catch(IOException io){io.printStackTrace();}

但是以下编译:

try(BufferedWriter bw =Files.newBufferedWriter(Paths.get("/home/user/Desktop/TryItOutMan.txt"), Charset.defaultCharset())
        {
        }
        catch(IOException io){io.printStackTrace();}

编译器似乎检查try-catch-with-resources语句中声明的类是否实现AutoClosable ...但是由于该方法返回BufferedWriter,它可能有效实现AutoClosable

只是要求确认

尝试(Files.newBufferedWriter(Paths.get(“/ home / user / Desktop / TryItOutMan.txt”),Charset.defaultCharset())

无法编译。

提前致谢。

2 个答案:

答案 0 :(得分:5)

如果你看一下try-with-resources in the JLS的语法定义,你会发现它需要一个变量名。所以它必须看起来像:

try (SomeType variable = xxx;)

答案 1 :(得分:2)

Java tutorial州:

  

try - with-resources语句是一个声明一个或多个资源的try语句。

在您的第一个代码段中,您没有声明资源:

Files.newBufferedWriter(Paths.get("/home/user/Desktop/TryItOutMan.txt")

在您的第二个片段中,您可以:

BufferedWriter bw = ....