1

只需确认以下内容无法编译,这不是我的错误:

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......但是它可能已经工作,因为该方法返回 a BufferedWriterwhich implements AutoClosable

只是要求确认

try(Files.newBufferedWriter(Paths.get("/home/user/Desktop/TryItOutMan.txt"), Charset.defaultCharset())

不编译。

提前致谢。

4

2 回答 2

5

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

try (SomeType variable = xxx;)
于 2013-08-05T08:42:15.340 回答
2

Java教程指出:

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

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

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

在您的第二个片段中,您执行以下操作:

BufferedWriter bw = ....
于 2013-08-05T08:43:13.283 回答