ニュース

Oracle、「Java 16」を発表 ~パターンマッチングinstanceofとrecord型が正式機能に

「Oracle JDK 16」はリリース後6カ月間サポート。次の「Oracle JDK 17」はLTSに

Oracle、「Java 16」を発表

 米Oracleは3月16日(現地時間)、プログラミング言語「Java」の最新版「Java 16」を発表。Java開発キット「Oracle JDK 16」の提供を開始した。「Java 16」には17のJEP(JDKの改善)が含まれている。なかでも、「Java 14」で初めてプレビューされた言語拡張“Pattern Matching for instanceof(JEP 394)”と“Record(JEP 395)”がプレビューを卒業し、標準仕様として利用できるようになった点が注目点だ。

 JEP 394は、instanceof演算子で型をチェックしたあとのキャストを省略できるようにしたもの。「Kotlin」言語のスマートキャスト(smart cast)に似た機能だ。

if (obj instanceof String) {
    String s = (String) obj;    // この行が不要になる
    System.out.println("String of length " + s.length());
}

 一方、JEP 395で追加されたRecord型は、データを保持するために用いられる特別なクラスだ。このクラスは継承不能・イミュータブル(作成した後は状態を変更できない)で、メンバーを定義すれば自動で適切なフィールド、コンストラクター、メソッドが追加される。従来のJava言語では、単にデータを保持するための“データキャリア”を定義するだけでもかなりのコードを記述する必要があったが、それがシンプルになる。

// 従来の記述
public final class Point {
   public double x;
   public double y;
   // コンストラクターやメンバーアクセス関数など...
}

// record を用いたシンプルな記述
record Point(double x, double y) {}

 そのほかにも以下の仕様が実験的に導入される。

  • Vector API(JEP 338):SIMD演算を利用(Incubator)
  • Foreign Linker API(JEP 389):非Javaのネイティブコードを安全かつ効率的に呼び出す(Incubator)
  • Foreign-Memory Access API(JEP 393):ガーベジコレクター管理外の外部メモリを扱う(Third Incubator)
  • Sealed Classes(JEP 397):継承できるクラスを限定(Second Preview)

 また、メモリ管理の改善によるパフォーマンス向上、自己完結型のJavaアプリパッケージのためのツール提供、将来互換性がなくなる機能のカプセル化と警告、「Mercurial」から「Git」への移行、“GitHub”リポジトリへの移行なども行われるとのこと。加えて、「Alpine Linux」ポートと「Windows/Aarch64」(ARM64版Windows)ポートがJDKメインラインリポジトリに統合される。

 「Oracle JDK 16」はリリース後6カ月間サポートされ、次の「Oracle JDK 17」がリリースされるまでに最低2回のマイナーアップデートが提供される予定。「Oracle JDK 17」は今年9月にリリースされ、「Oracle JDK 11」に続く長期サポート版(LTS)となる。