Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9におけるtry-with-resourcesの改善点とは?

try-with-resourcesとは

try-with-resourcesはJava 7で導入された機能で、使用し終えたリソースを自動的にクローズ(解放)することを目的としています。ただし、従来の仕様には制限があり、リソースはtry文の前、またはtryブロック内で宣言されている必要がありました。この条件を満たさない場合、コンパイルエラーが発生します。

Java 9ではtry-with-resourcesが改善され、tryブロック内でオブジェクトを新たに宣言する必要がなくなりました。これにより、事前に宣言済みの変数やfinal相当の変数をそのままtry-with-resourcesに渡せるようになり、コードがより簡潔で読みやすくなりました。

以下の例では、try-with-resourcesの基本的な使い方を実装しています。

コード例

import java.io.*;
public class TryWithResourceTest {
    public static void main(String[] args) throws FileNotFoundException {
        String line;
        Reader reader = new StringReader("tutorialspoint");
        BufferedReader breader = new BufferedReader(reader);
        try(breader) {
            while((line = breader.readLine()) != null) {
                System.out.println(line);
            }
        } catch(IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

実行結果

tutorialspoint

まとめ

この例のように、BufferedReaderのインスタンスをtryブロックの外で生成し、try(breader)と記述するだけで自動的にクローズされます。Java 8以前では、このような書き方を行うとコンパイルエラーになっていましたが、Java 9以降では問題なく動作します。リソース管理のコードがスッキリし、意図しないリソースリークも防げるため、ファイルやストリームを扱う際には積極的に活用しましょう。

  1. Java 9のSubscriptionインターフェースのルールとは?基本から徹底解説

    Java 9で導入されたReactive Streams(java.util.concurrent.Flow)において、SubscriptionはPublisherとSubscriberの間のデータ交換を仲介するための重要な役割を担います。Subscriptionは必ず1つのPublisherと1つのSubscriberのペアでのみ共有されます。そのため、subscribe()メソッドは生成されたSubscriptionを返さず、戻り値はvoidになっています。SubscriptionはonSubscribe()メソッドのコールバックを通じてのみSubscriberへ渡されます。Subscri

  2. Java 9における@Deprecatedアノテーションの改善点とは?新要素「since」「forRemoval」を徹底解説

    @Deprecatedアノテーションとはクラス、メソッド、フィールドなど、プログラム内のあらゆる要素に付与できる@Deprecatedアノテーションは、「その要素はもはや使用すべきではない」ことを示すためのものです。要素が非推奨とされる主な理由は以下の通りです。使用すると危険であり、エラーを引き起こす可能性がある将来のバージョンで互換性がなくなる可能性がある将来のバージョンで削除される可能性があるより優れた、効率的な代替手段がすでに提供されているJava 9で追加された2つの新しい要素Java 9では、@DeprecatedアノテーションにsinceとforRemovalという2つの新しい属性