Java9-try-with-resources-improvement

提供:Dev Guides
移動先:案内検索

Java 9-リソースの試用の改善

try-with-resourcesステートメントは、1つ以上のリソースが正式に宣言されたtryステートメントです。 ここで、リソースは、不要になったら閉じる必要があるオブジェクトです。 try-with-resourcesステートメントは、要件の終了後に各リソースが確実に閉じられるようにします。 java.lang.AutoCloseableまたはjava.io.Closeableインターフェースを実装するオブジェクトは、リソースとして使用できます。

Java 9より前では、リソースはtryの前またはtryステートメント内で宣言され、以下の例に示されています。 この例では、BufferedReaderをリソースとして使用して文字列を読み取り、BufferedReaderを閉じます。

Tester.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;

public class Tester {
   public static void main(String[] args) throws IOException {
      System.out.println(readData("test"));
   }
   static String readData(String message) throws IOException {
      Reader inputString = new StringReader(message);
      BufferedReader br = new BufferedReader(inputString);
      try (BufferedReader br1 = br) {
         return br1.readLine();
      }
   }
}

出力

test

ここでは、try statment内でリソースbr1を宣言してから使用する必要があります。 Java9では、br1を宣言する必要がなくなり、次のプログラムでも同じ結果が得られます。

Tester.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;

public class Tester {
   public static void main(String[] args) throws IOException {
      System.out.println(readData("test"));
   }
   static String readData(String message) throws IOException {
      Reader inputString = new StringReader(message);
      BufferedReader br = new BufferedReader(inputString);
      try (br) {
         return br.readLine();
      }
   }
}

出力

test