只是确认以下内容没有编译,这不是我的错误:
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())
无法编译。
提前致谢。
答案 0 :(得分:5)
如果你看一下try-with-resources in the JLS的语法定义,你会发现它需要一个变量名。所以它必须看起来像:
try (SomeType variable = xxx;)
答案 1 :(得分:2)
try
- with-resources语句是一个声明一个或多个资源的try
语句。
在您的第一个代码段中,您没有声明资源:
Files.newBufferedWriter(Paths.get("/home/user/Desktop/TryItOutMan.txt")
在您的第二个片段中,您可以:
BufferedWriter bw = ....