关于尝试资源声明的询问

Rol*_*all 1 java resources try-catch

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

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

但是以下编译:

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

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

只是要求确认

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

不编译.

提前致谢.

ass*_*ias 5

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

try (SomeType variable = xxx;)
Run Code Online (Sandbox Code Playgroud)