この記事は新野淳一氏のブログ「Publickey」に掲載された「Java 18正式リリース。デフォルトのCharsetが「UTF-8」に、シンプルWebサーバ搭載など新機能」(2022年3月23日掲載)を、ITmedia NEWS編集部で一部編集し、転載したものです。
Javaの新バージョン「Java 18」が正式にリリースされました。
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の追加など
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のページを参照してみてください。
Copyright © ITmedia, Inc. All Rights Reserved.
Special
PR