C#やVB.NETのUsing構文みたいなJavaの機能【try-with-resources】


C#やVB.NETでは、ファイルやデータベースなどのリソースの利用には『Usingステートメント』が便利なのでよく使用します。
※UsingステートメントはCloseやDisposeをコードに書かなくてもリソース破棄を自動で行ってくれる機能

Javaで開発しているプロジェクトに参加することになったんですが、そのプロジェクトのJavaグラマーたちはせっせとTry〜catch〜finallyでファイルクローズしている様子。

たぶんJavaにもUsingみたいなのあるやろって調べたらあったのでメモ。

try-with-resources

従来の書き方は以下のような感じです。

FileReader fReader = null;
BufferedReader buffReader = null;
try {
    fReader = new FileReader(csvFile);
    buffReader = new BufferedReader(fReader);
    ・・・処理・・・
} catch (Exception e) {
    ・・・処理・・・
} finally {
    //ここにClose処理が必要
    ・・・処理・・・
}

try-with-resourcesを使うとこんな感じ。
try (FileReader fReader = new FileReader (csvFile);
    BufferedReader bufferedReader = new BufferedReader(fReader);) {
    ・・・処理・・・
} catch (Exception e) {
    ・・・処理・・・
} finally {
    //Close処理は書かない
}

まとめ

注意点としては、Tryのコンストラクタ内に定義する変数はネストせずに一つ一つセミコロンで区切るということです。

そうしないと、コンストラクタで例外が発生した場合にうまく開放されないことがあるらしいです。

以上


<スポンサーリンク>


0 件のコメント :

コメントを投稿