Java18以降の変更(Java18〜20の概要)
すべてのバージョンアップで変更点を見ている方は少ないと思います。そのような方にとっては、Java21の変更点だけを紹介してもわかりにくいところがあります。
Java17以降のリリースであるJava18からJava19については前回記事で詳しく紹介しています。今回は、Java 20までに正式リリースされた変更点について改めて簡単に紹介します。
表1がJava18〜20までの正式リリースされた主な変更点です。
JEP | 名称 | リリースされたバージョン |
---|---|---|
JEP400 | UTF-8のデフォルト化 | Java18 |
JEP408 | 簡易Webサーバ | Java18 |
JEP413 | JavaDoc用のコメントの改善 | Java18 |
JEP418 | インターネットアドレス名前解決のSPI化 | Java18 |
JEP421 | 削除のためのファイナライズの非推奨化 | Java18 |
JEP418以外についても前回記事で紹介しているので、そちらを参照ください。また、JEP418の意味は名前解決がSPI化されたことにより独自実装が可能になることで、自ら利用する必要があるエンジニアは多くありません。
これらを振り返ると、正式リリースの範囲に限れば、多くのJavaエンジニアにとって既存のコードや、これから作成するコードに対しても、大きな変更点はなかったと言えます。
一方、Java19とJava20では、Project Amber関連のPreview版リリースが多くありました。そして、これらのPreview版機能が今回のJava21の主なリリース内容になっています。
Java21での主な変更点
Java21でリリースされた主な変更点は表2の通りです。
JEP | 名称 |
---|---|
JEP431 | 順番を保持したコレクションインターフェース(Sequenced Collections) |
JEP440 | レコードパターン(Record Patterns) |
JEP441 | Switchでのパターンマッチ(Pattern Matching for switch) |
JEP444 | 仮想スレッド(Virtual Threads) |
また、Preview版としてリリースされたものが表3です。
JEP | 名称 |
---|---|
JEP430 | 文字列テンプレート(String Templates) |
JEP443 | 無名パターンと無名変数(Unnamed Patterns and Variables) |
JEP445 | mainメソッドの改善(Unnamed Classes and Instance Main Methods) |
「仮想スレッド(JEP444)」については、Java19のPreview版としてリリースされたものがそのまま正式版になり、こちらで紹介しているのでそちらを参照してください。
このJEP444とJEP431以外の変更内容がProject Amber関連の変更になります。これらの変更の多くはそれぞれが関連していて、これらを組み合わせることでよりコードが記述しやすく、そして、読みやすいコードになります。
順番を保持したコレクションインターフェース(JEP431)
これまでは明確に要素の順番を維持するコレクションインターフェースがありませんでした。そこで、図1に示すようにSequencedCollection、SequencedSet、SequencedMapのインターフェースが追加されました。
筆者も以前、HashMapやHashtableクラスなどを使った時に自分が想像した順番に並んでいないことに驚いたのを覚えています。これまでは、各実装ごとにこれらに注意して適切なクラスを選択しなければいけませんでした。しかし、これからは、これらのインターフェースを見れば順番が保証されているかどうかがすぐに分かります。そのため、これからJavaプログラミングを始める人にとっては分かりやすくなったのではないかと思います。