Java 18正式リリース。デフォルトのCharsetが「UTF-8」に、シンプルWebサーバ搭載など新機能
Javaの新バージョン「Java 18」が正式にリリースされました。
Java 18 is now available! #Java18 #JDK18 #openjdk
— Java (@java) March 22, 2022
Download now: https://t.co/hTJU1ZzAWQ
Release notes: https://t.co/Xdkj5TObNP
API Javadoc: https://t.co/izFBPlYkd9
Features: https://t.co/3z0l5sXyDX pic.twitter.com/Ct1BvYmDYs
Javaは6カ月ごとに「フィーチャーリリース」と呼ばれるバージョンアップが行われ、そのなかの1つのバージョンが3年ごとに長期サポート(LTS:Long Term Support)版に指定されます。
現在のLTS版は2021年9月にリリースされたJava 17です。Java 18は、この次のバージョンとして登場しました。
業務アプリケーションの開発など、一定期間は安定したバージョンを使いたい場合にはLTS版のJava 17を、最新の機能をいちはやく利用したい場合には今回のJava 18を利用するのが適切でしょう。
参考:3年ぶりの長期サポート版となる「Java 17」正式版がリリース。M1 Macのサポート、Sealed Classの追加など
CharsetがデフォルトでUTF-8に、シンプルWebサーバ搭載など
Java 18でもっとも大きな変更点といえそうなのは、Charsetがデフォルトで「UTF-8」になることでしょう(JEP 400)。
これまでJavaのCharsetはJavaVM起動時に決定され、デフォルトではOSに従い、オプションが指定されていればそのオプションに従うことになっていました。これがJava 18からはデフォルトでUTF-8が設定されるようになりました。
JEP 400のページでは、これまでデフォルトの状態ではmacOSのJava APIで出力したデータをWindowsの英語もしくは日本語環境のJava APIで読み込むと文字化けが起きていた、という例が示されています。
java.io.FileReader(“hello.txt”)
-> “こんにちは” (macOS)
java.io.FileReader(“hello.txt”)
-> “ã?“ã‚“ã?«ã?¡ã? ” (Windows (en-US))
java.io.FileReader(“hello.txt”)
-> “縺ォ縺。縺ッ” (Windows (ja-JP)
すべてのプラットフォームにおいてデフォルトのCharsetがUTF-8になることで、こうした文字化けを防ぐことができるようになります。
シンプルなWebサーバがJDKに組み込まれる「JEP 408」は、開発者にとって便利な機能となりそうです。CLIからWebサーバを立ち上げて静的HTMLを参照できるようになります。サーブレットやCGIなどの動的なページは生成できませんが、プロトタイピングやアドホックな開発の場面で役立つと説明されています。
「JEP 413: Code Snippets in Java API Documentation」は、コードスニペット、つまり小さなコードの断片をJavaDocに組み込むことを可能にする新機能。Java開発者が作るドキュメントにサンプルコードが入るようになるため、より具体的で読みやすくなります。
「JEP 416: Reimplement Core Reflection with Method Handles」は、Java内部で実装されているReflectionsメソッドを、将来の変更に備えてよりセキュアで一貫性の高い形で置き換えた、というもの。
「JEP 417: Vector API (Third Incubator)」は、ベクトル処理に関する最適化や処理性能の向上をしたもの。
「JEP 420: Pattern Matching for switch (Second Preview)」は、文字通りSwitchのなかでパターンマッチングを使えるようにするというものです。
ほかにもJava 18では多くの機能追加や改善、バグフィクスなどが行われています。詳細はJava 18のページを参照してみてください。
関連記事
AWS Corretto 18もリリースされました。
あわせて読みたい
AWS、Java 18対応の独自Javaディストリビューション「Amazon Corretto 18」正式リリース
≪前の記事
[速報]JavaOneが復活、今年10月にラスベガスで開催。2017年以来5年ぶり