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 を返すため、機能していた可能性があります。BufferedWriterAutoClosable

という確認を求めるだけで

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 ステートメントは、1tryつ以上のリソースを宣言するステートメントです。

最初のスニペットでは、リソースを宣言しません。

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

2 番目のスニペットでは、次のことを行います。

BufferedWriter bw = ....
于 2013-08-05T08:43:13.283 に答える