モジュール java.base

パッケージ java.lang.constant

クラスやメソッド・ハンドルなどのランタイム・エンティティ用に「名目記述子」を表すクラスおよびインタフェース、および定数プール・エントリやinvokedynamicコール・サイトなどのクラス・ファイル・エンティティ用に「名目記述子」を表すクラスおよびインタフェース。 これらのクラスは、バイトコードの読取りおよび書込みAPI、invokedynamicブートストラップ、バイトコードの固有api、およびコンパイル時またはリンク時プログラム分析ツールに使用するのに適しています。

バイトコードの読み取りおよび書き込みを行うすべてのAPIにおいて、これらの命令およびほかのクラス・ファイル構造へのオペランドをモデル化する必要があります(ブートストラップ・メソッド表またはスタック・マップのエントリなど。クラス・ファイル定数プールのエントリを頻繁に参照します。) このようなエントリは、文字列や整数などの基本タイプの値、プログラムの一部(クラスやメソッド・ハンドルなど)、または任意のユーザー定義タイプの値を示します。 ConstantDesc階層は、バイトコード命令のオペランドをモデル化するのに便利な名目書式の定数プール・エントリを表します。

名目記述子

ConstantDescは、定数値の説明です。 このような説明は、定数値の「名目書式」であり、値自体ではなく、値を記述するために"recipe"が定数プール・エントリに値を格納するか、クラスのロード・コンテキストに指定された値を再構成することです。 すべてのConstantDescresolve自体の参照方法 -- 説明している値をコンピュート -- ConstantDesc.resolveConstantDescを使用します。 名目説明で参照されるクラスおよびメソッドが存在してアクセス可能である場合、このAPIは、ConstantDescオブジェクトを受け入れてこれらを反映的に評価できます。

ConstantDescのサブタイプは、さまざまな種類の定数値を記述しています。 JVMS 4.4で定義されているロード可能な定数プール・エントリのタイプごとに、対応するサブタイプConstantDescがあります: ClassDescMethodTypeDescDirectMethodHandleDescStringIntegerLongFloatDoubleおよびDynamicConstantDesc これらのクラスは、その種類の定数の名目上の情報を抽出するための、タイプ固有のアクセッサ・メソッドを提供します。 バイトコード作成APIでConstantDescを検出した場合、このAPIを調査して、これらのタイプを確認し、キャストし、名目情報を抽出し、定数プールに対応するエントリを生成する必要があります。 バイトコードによる読取りAPIが定数プールのエントリを検知すると、名目記述子の適切な型に変換できます。 動的定数用のバイトコード読取りAPIでは、ファクトリDynamicConstantDesc.ofCanonicalを使用することが必要な場合があります。このファクトリDynamicConstantDesc.ofCanonicalは、ブートストラップを検査し、正しく知られているブートストラップのために、Enum.EnumDescなどの特定のサブタイプDynamicConstantDescを返します。

値の名目説明を取得する別の方法は、値自体を要求することです。 Constableは、値が独自にConstantDescとして名目の形式で記述できるタイプです。 ユーザー定義クラスと同様に、StringClass実装Constableなどの基本的なタイプです。 クラス・ファイルを生成するエンティティ(コンパイラなど)は、constableなオブジェクトをイントロスペクトして、クラス・ファイルで値を表現するより効率的な方法を得ることができます。

このパッケージには、DynamicCallSiteDescも含まれます。これは、(non-loadable) Constant_InvokeDynamic_info定数プールのエントリを表します。 これは、invokedynamic命令に関連付けられたブートストラップ・メソッド、呼出し名、型およびブートストラップ引数について説明します。 また、バイトコードの読取りおよび書込みAPIでのinvokedynamicコール・サイトの記述にも適しています。

Java Virtual Machine仕様を参照してください:
4.4 定数プール
導入されたバージョン:
12