Javaの試験的機能について。
|
Javaでは、新しい機能が正式な機能として取り込まれる前に、試験的・実験的な機能として実装されることがある。
そういった機能のことはpreview・incubator・experimentalといった言葉で呼ばれるが、その使い分けはきしださんによると以下のようなものらしい。
名称 | 説明 | 備考 |
---|---|---|
preview プレビュー |
Javaの文法・構文に関する試験的機能 | 新文法のプレビュー版は、javac・java・jshellコマンドに「--enable-preview」を付けないと使えない。 |
incubator インキュベーター |
試験的に追加されたライブラリー(モジュール) すなわち新しいクラス |
「jdk.incubator.〜」といったパッケージ名で実装される。 正式機能となる時に正式なパッケージ名に変更される。 (文法と関係なく)インキュベーターからプレビューに変わることもある。[2022-09-25] |
experimental エクスペリメンタル |
JavaVMに関する試験的機能 | GC等 |
Java14で@jdk.internal.PreviewFeature
というアノテーションが追加されたようだ。
プレビュー機能として提供されているクラスや列挙子などにこのアノテーションが付けられている。
(上記の通り「プレビュー」は新文法・新構文に対して使われるが、それを実現する為にクラスやメソッドが追加されることがあり、そういったクラスにこのアノテーションが付けられる)
このアノテーション自体は公開されていない(モジュール内部用である)ので、普通のユーザーが使うことは出来ないが、あるクラスやメソッドを見たときにこのアノテーションが付いていたら、それはプレビュー版だという事が分かる。
例えばJava14でプレビュー機能として追加されたRecordクラスには以下のようにPreviewFeatureアノテーションが付けられている。
@jdk.internal.PreviewFeature(feature=jdk.internal.PreviewFeature.Feature.RECORDS, essentialAPI=true) public abstract class Record {
※余談だが、PreviewFeature.Feature列挙型を見れば、現在どんなプレビュー機能があるか分かりそうだ(笑)
機能 | JDK | 更新日 | 正式機能 | |
---|---|---|---|---|
switch式 | 12 | 2019-03-31 | switch式 | 14 |
switch式(Second Preview) | 13 | 2019-09-22 | ||
テキストブロック | 13〜14 | 2020-09-16 | テキストブロック | 15 |
レコード | 14〜15 | 2020-09-22 | レコード | 16 |
パターンマッチングinstanceof | 14〜15 | 2020-03-21 | パターンマッチングinstanceof | 16 |
シールクラス | 15〜16 | 2023-09-23 | シールクラス | 17 |
パターンマッチングswitch | 17〜20 | 2023-09-23 | パターンマッチングswitch | 21 |
レコードパターン | 19〜20 | 2023-09-23 | レコードパターン | 21 |
仮想スレッド | 19〜20 | 2023-09-23 | 仮想スレッド | 21 |
Foreign Function & Memory API | 19〜21 | 2023-09-23 | Foreign Function & Memory API | 22 |
Structured Concurrency | 21〜22 | 2024-03-22 | ||
Scoped Values | 21〜22 | 2024-03-22 | ||
文字列テンプレート | 21〜22 | 2024-03-22 | ||
無名変数 | 21 | 2023-09-23 | 無名変数 | 22 |
mainメソッド簡略化 | 21〜22 | 2024-03-22 | ||
super()の前に文を書く | 22 | 2024-03-22 | ||
Class-File API | 22 | 2024-03-23 | ||
Stream Gatherersクラス | 22 | 2024-03-22 |