Java 9のTry-with-resources改善:よりクリーンなコードへ
try-with-resources文は、1つ以上のリソースを適切に宣言するtry文です。ここでリソースとは、不要になったら閉じるべきオブジェクトのことです。try-with-resources文は、各リソースが処理完了後に確実に閉じられることを保証します。java.lang.AutoCloseableまたはjava.io.Closeableインターフェースを実装するオブジェクトをリソースとして使用できます。
Java 9以前では、リソースをtryの前またはtry文内で宣言する必要がありました。以下の例では、BufferedReaderをリソースとして文字列を読み取り、その後閉じています。
Java 9以前の書き方
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) { // 新しい変数br1を宣言して使用
return br1.readLine();
}
}
}
出力
test
ここではtry文内でリソースbr1を宣言して使用する必要がありました。Java 9ではこの宣言が不要になり、以下のプログラムで同じ結果が得られます。
Java 9以降の書き方
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) { // 既存の変数brを直接使用可能
return br.readLine();
}
}
}
出力
test
Java 9では、実質的にfinalな変数(一度だけ代入される変数)をtry-with-resourcesで直接使用できるようになり、コードがよりシンプルになりました。
Java
- Java例外ハンドリング実践:try-catch-finallyとリソース管理
- Java String.length()メソッド:文字列サイズ取得の実例解説
- Java String.indexOf()マスター:部分文字列検索と実践例
- Java String.charAt()完全解説:構文、戻り値、例外、実例
- Java String.compareTo()マスター:構文、ユースケース、実践例
- Java String.contains()メソッド:部分文字列チェックの実践例
- Java String.endsWith()マスター:文字列サフィックスチェック実例付き
- Java BufferedReader でファイル読み込み:実践ガイドと例
- Javaで挿入ソート:わかりやすい例とステップバイステップガイド
- Javaで選択ソート:ステップバイステップ例と完全コード
- Java 8 深掘り学習のための必須リソース集