パッケージ java.lang.constant
invokedynamicコール・サイトなどのクラス・ファイル・エンティティ用に「名目記述子」を表すクラスおよびインタフェース。 これらのクラスは、バイトコードの読取りおよび書込みAPI、invokedynamicブートストラップ、バイトコードの固有api、およびコンパイル時またはリンク時プログラム分析ツールに使用するのに適しています。
バイトコードの読み取りおよび書き込みを行うすべてのAPIにおいて、これらの命令およびほかのクラス・ファイル構造へのオペランドをモデル化する必要があります(ブートストラップ・メソッド表またはスタック・マップのエントリなど。クラス・ファイル定数プールのエントリを頻繁に参照します。) このようなエントリは、文字列や整数などの基本タイプの値、プログラムの一部(クラスやメソッド・ハンドルなど)、または任意のユーザー定義タイプの値を示します。 ConstantDesc階層は、バイトコード命令のオペランドをモデル化するのに便利な名目書式の定数プール・エントリを表します。
名目記述子
ConstantDescは、定数値の説明です。 このような説明は、定数値の「名目書式」であり、値自体ではなく、値を記述するために"recipe"が定数プール・エントリに値を格納するか、クラスのロード・コンテキストに指定された値を再構成することです。 すべてのConstantDescがresolve自体の参照方法 -- 説明している値をコンピュート -- ConstantDesc.resolveConstantDescを使用します。 名目説明で参照されるクラスおよびメソッドが存在してアクセス可能である場合、このAPIは、ConstantDescオブジェクトを受け入れてこれらを反映的に評価できます。
ConstantDescのサブタイプは、さまざまな種類の定数値を記述しています。 JVMS 4.4で定義されているロード可能な定数プール・エントリのタイプごとに、対応するサブタイプConstantDescがあります: ClassDesc、MethodTypeDesc、DirectMethodHandleDesc、String、Integer、Long、Float、DoubleおよびDynamicConstantDesc。 これらのクラスは、その種類の定数の名目上の情報を抽出するための、タイプ固有のアクセッサ・メソッドを提供します。 バイトコード作成APIでConstantDescを検出した場合、このAPIを調査して、これらのタイプを確認し、キャストし、名目情報を抽出し、定数プールに対応するエントリを生成する必要があります。 バイトコードによる読取りAPIが定数プールのエントリを検知すると、名目記述子の適切な型に変換できます。 動的定数用のバイトコード読取りAPIでは、ファクトリDynamicConstantDesc.ofCanonicalを使用することが必要な場合があります。このファクトリDynamicConstantDesc.ofCanonicalは、ブートストラップを検査し、正しく知られているブートストラップのために、Enum.EnumDescなどの特定のサブタイプDynamicConstantDescを返します。
値の名目説明を取得する別の方法は、値自体を要求することです。 Constableは、値が独自にConstantDescとして名目の形式で記述できるタイプです。 ユーザー定義クラスと同様に、StringやClass実装Constableなどの基本的なタイプです。 クラス・ファイルを生成するエンティティ(コンパイラなど)は、constableなオブジェクトをイントロスペクトして、クラス・ファイルで値を表現するより効率的な方法を得ることができます。
このパッケージには、DynamicCallSiteDescも含まれます。これは、(non-loadable) Constant_InvokeDynamic_info定数プールのエントリを表します。 これは、invokedynamic命令に関連付けられたブートストラップ・メソッド、呼出し名、型およびブートストラップ引数について説明します。 また、バイトコードの読取りおよび書込みAPIでのinvokedynamicコール・サイトの記述にも適しています。
- Java Virtual Machine仕様を参照してください:
-
4.4 定数プール
- 導入されたバージョン:
- 12
-
インタフェースのサマリー インタフェース 説明 ClassDesc Constable constableのタイプを表します。ConstantDesc JVMS 4.4で定義されている、ロード可能な定数値用の「名目記述子」。DirectMethodHandleDesc 直接MethodHandleの場合は「名目記述子」。MethodHandleDesc MethodHandle定数の場合は「名目記述子」。MethodTypeDesc MethodType定数の場合は「名目記述子」。 -
クラスのサマリー クラス 説明 ConstantDescs プリミティブ・クラス・タイプおよびその他の共通プラットフォーム・タイプの記述子を含む共通定数の「名目記述子」の事前定義値、および標準ブートストラップ・メソッドのメソッド・ハンドルの記述子。DynamicCallSiteDesc invokedynamic呼び出しサイトの場合「名目記述子」。DynamicConstantDesc<T> 動的定数の場合は「名目記述子」 (Constant_Dynamic_infoで固定プールに記述されているもの。) -
列挙型のサマリー 列挙型 説明 DirectMethodHandleDesc.Kind DirectMethodHandleDescで記述できるメソッド・ハンドルの種類。