S-JIS[2020-03-21/2024-03-23] 変更履歴

Javaプレビュー機能

Javaの試験的機能について。


概要

Javaでは、新しい機能が正式な機能として取り込まれる前に、試験的・実験的な機能として実装されることがある。
そういった機能のことはpreview・incubator・experimentalといった言葉で呼ばれるが、その使い分けはきしださんによると以下のようなものらしい。

名称 説明 備考
preview
プレビュー
Javaの文法・構文に関する試験的機能 新文法のプレビュー版は、javac・java・jshellコマンドに「--enable-preview」を付けないと使えない。
incubator
インキュベーター
試験的に追加されたライブラリー(モジュール)
すなわち新しいクラス
「jdk.incubator.〜」といったパッケージ名で実装される。
正式機能となる時に正式なパッケージ名に変更される。
(文法と関係なく)インキュベーターからプレビューに変わることもある。[2022-09-25]
experimental
エクスペリメンタル
JavaVMに関する試験的機能 GC等

PreviewFeatureアノテーション

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    

Java目次へ戻る / 新機能へ戻る / 技術メモへ戻る
メールの送信先:ひしだま