クラスConstantBootstraps
java.lang.Object
java.lang.invoke.ConstantBootstraps
public final class ConstantBootstraps extends Object
動的に計算される定数のブートストラップ・メソッド。
このクラスのブートストラップ・メソッドは、null値を受け入れる引数を指定しないかぎり、nullである参照引数のNullPointerExceptionをスローします。
- 導入されたバージョン:
- 11
-
メソッドのサマリー
修飾子と型メソッド説明static VarHandlearrayVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> arrayClass) 配列型にVarHandleを検索します。static <E extends Enum<E>>
EenumConstant(MethodHandles.Lookup lookup, String name, Class<E> type) nameによって指定された名前を持つtypeによって指定された型のenum定数を返します。static ObjectexplicitCast(MethodHandles.Lookup lookup, String name, Class<?> dstType, Object value) ソース・タイプから宛先タイプへの変換を適用します。static VarHandlefieldVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> declaringClass, Class<?> fieldType) インスタンス・フィールドのVarHandleを検索します。static ObjectgetStaticFinal(MethodHandles.Lookup lookup, String name, Class<?> type) クラスで宣言された静的な最終フィールドの値を返します。この値は、(または、プリミティブ値フィールドの場合はラッパー・クラスで宣言されます。)フィールド・タイプと同じですstatic ObjectgetStaticFinal(MethodHandles.Lookup lookup, String name, Class<?> type, Class<?> declaringClass) 静的最終フィールドの値を返します。static Objectinvoke(MethodHandles.Lookup lookup, String name, Class<?> type, MethodHandle handle, Object... args) 指定された引数を使ってメソッド・ハンドルを呼び出した結果を返します。static ObjectnullConstant(MethodHandles.Lookup lookup, String name, Class<?> type) typeで指定された参照型のnullオブジェクト参照を戻します。static Class<?> primitiveClass(MethodHandles.Lookup lookup, String name, Class<?> type) nameによって型記述子が指定されているプリミティブ型のClassミラーを戻します。static VarHandlestaticFieldVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> declaringClass, Class<?> fieldType) 静的フィールドのVarHandleを検索します。
-
メソッドの詳細
-
nullConstant
public static Object nullConstant(MethodHandles.Lookup lookup, String name, Class<?> type) typeで指定された参照型のnullオブジェクト参照を戻します。- パラメータ:
lookup- 未使用name- 未使用type- 参照型- 戻り値:
nullの値- スロー:
IllegalArgumentException-typeが参照型の場合
-
primitiveClass
public static Class<?> primitiveClass(MethodHandles.Lookup lookup, String name, Class<?> type) nameによって型記述子が指定されているプリミティブ型のClassミラーを戻します。- パラメータ:
lookup- 未使用name- 必要なプリミティブ型の記述子(JVMS 4.3)type- 必要な結果タイプ(Class.classである必要があります)- 戻り値:
Classミラー- スロー:
IllegalArgumentException- 名前がプリミティブ型の記述子でないか、型がClass.classでない場合
-
enumConstant
public static <E extends Enum<E>> E enumConstant(MethodHandles.Lookup lookup, String name, Class<E> type) nameによって指定された名前を持つtypeによって指定された型のenum定数を返します。- 型パラメータ:
E- 定数値を返す列挙型- パラメータ:
lookup- 操作を実行するクラスを説明するルックアップ・コンテキスト(通常はJVMによってスタック)name- 返される定数の名前。指定された型の列挙型定数と完全に一致する必要があります。type- 定数を戻す列挙型を記述するClassオブジェクト- 戻り値:
- 指定された名前を持つ指定されたenum型のenum定数
- スロー:
IllegalAccessError- 宣言するクラスまたはフィールドに、操作を実行するクラスがアクセスできない場合IllegalArgumentException- 指定されたenum型が指定された名前の定数を持たない場合、または指定されたクラス・オブジェクトがenum型を表さない場合- 関連項目:
-
getStaticFinal
public static Object getStaticFinal(MethodHandles.Lookup lookup, String name, Class<?> type, Class<?> declaringClass) 静的最終フィールドの値を返します。- パラメータ:
lookup- 操作を実行するクラスを説明するルックアップ・コンテキスト(通常はJVMによってスタック)name- フィールドの名前type- フィールドの型declaringClass- フィールドが宣言されているクラス- 戻り値:
- フィールドの値
- スロー:
IllegalAccessError- 宣言するクラスまたはフィールドに、操作を実行するクラスがアクセスできない場合NoSuchFieldError- 指定されたフィールドが存在しない場合IncompatibleClassChangeError- 指定されたフィールドがfinalでない場合
-
getStaticFinal
public static Object getStaticFinal(MethodHandles.Lookup lookup, String name, Class<?> type) クラスで宣言された静的な最終フィールドの値を返します。この値は、(または、プリミティブ値フィールドの場合はラッパー・クラスで宣言されます。)フィールド・タイプと同じです これは、クラス自体の識別定数インスタンスを宣言する場合の、getStaticFinal(MethodHandles.Lookup, String, Class, Class)の簡略化された形式です。- パラメータ:
lookup- 操作を実行するクラスを説明するルックアップ・コンテキスト(通常はJVMによってスタック)name- フィールドの名前type- フィールドの型- 戻り値:
- フィールドの値
- スロー:
IllegalAccessError- 宣言するクラスまたはフィールドに、操作を実行するクラスがアクセスできない場合NoSuchFieldError- 指定されたフィールドが存在しない場合IncompatibleClassChangeError- 指定されたフィールドがfinalでない場合- 関連項目:
-
invoke
public static Object invoke(MethodHandles.Lookup lookup, String name, Class<?> type, MethodHandle handle, Object... args) throws Throwable 指定された引数を使ってメソッド・ハンドルを呼び出した結果を返します。このメソッドは、呼び出されるメソッド・ハンドルが、
MethodHandle.asType(java.lang.invoke.MethodType)を介して指定されたメソッド・ハンドルを適応させた結果として動作し、戻り型を目的の型に調整します。- パラメータ:
lookup- 未使用name- 未使用type- 戻される値の必要な型で、メソッド・ハンドルの戻り型と互換性があることhandle- 呼び出されるメソッド・ハンドルargs-MethodHandle.invokeWithArguments(java.lang.Object...)の場合と同様に、メソッド・ハンドルに渡す引数。 各引数はnullである可能性があります。- 戻り値:
- メソッド・ハンドルを呼び出した結果
- スロー:
WrongMethodTypeException- 指定された数の引数を受け取るようにハンドル・メソッドの型を調整できない場合、またはハンドルの戻り型を目的の型に調整できない場合。ClassCastException- 引数または呼出しにより生成された結果が参照キャストで変換できない場合Throwable- メソッド・ハンドル呼出しによってスローされるすべての要素
-
fieldVarHandle
public static VarHandle fieldVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> declaringClass, Class<?> fieldType) インスタンス・フィールドのVarHandleを検索します。- パラメータ:
lookup- 操作を実行するクラスを説明するルックアップ・コンテキスト(通常はJVMによってスタック)name- フィールドの名前type- 必要な結果タイプ(Class<VarHandle>である必要があります)declaringClass- フィールドが宣言されているクラスfieldType- フィールドの型- 戻り値:
- the
VarHandle - スロー:
IllegalAccessError- 宣言するクラスまたはフィールドに、操作を実行するクラスがアクセスできない場合NoSuchFieldError- 指定されたフィールドが存在しない場合IllegalArgumentException- タイプがVarHandleでないかどうか
-
staticFieldVarHandle
public static VarHandle staticFieldVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> declaringClass, Class<?> fieldType) 静的フィールドのVarHandleを検索します。- パラメータ:
lookup- 操作を実行するクラスを説明するルックアップ・コンテキスト(通常はJVMによってスタック)name- フィールドの名前type- 必要な結果タイプ(Class<VarHandle>である必要があります)declaringClass- フィールドが宣言されているクラスfieldType- フィールドの型- 戻り値:
- the
VarHandle - スロー:
IllegalAccessError- 宣言するクラスまたはフィールドに、操作を実行するクラスがアクセスできない場合NoSuchFieldError- 指定されたフィールドが存在しない場合IllegalArgumentException- タイプがVarHandleでないかどうか
-
arrayVarHandle
public static VarHandle arrayVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> arrayClass) 配列型にVarHandleを検索します。- パラメータ:
lookup- 操作を実行するクラスを説明するルックアップ・コンテキスト(通常はJVMによってスタック)name- 未使用type- 必要な結果タイプ(Class<VarHandle>である必要があります)arrayClass- 配列の型- 戻り値:
- the
VarHandle - スロー:
IllegalAccessError- 操作を実行するクラスが配列のコンポーネント・タイプにアクセスできない場合IllegalArgumentException- タイプがVarHandleでないかどうか
-
explicitCast
public static Object explicitCast(MethodHandles.Lookup lookup, String name, Class<?> dstType, Object value) throws ClassCastException ソース・タイプから宛先タイプへの変換を適用します。宛先タイプが
dstTypeで、入力値がvalueの場合、次のいずれかが発生します:dstTypeがvoid.classの場合、ClassCastExceptionがスローされます。dstTypeがObject.classの場合、valueはそのまま返されます。
それ以外の場合は、次のいずれかの変換が
valueに適用されます:dstTypeが参照型の場合、dstType.cast(value)をコールするかのように、参照キャストがvalueに適用されます。dstTypeがプリミティブ・タイプの場合、そして、valueのランタイム・タイプがプリミティブ・ラッパー・タイプ(Integerなど)であれば、Javaアン・ボクシング変換が適用され5.1.8、その後にJavaキャスティング変換、直接dstTypeへの変換、または、dstTypeがbooleanならば、intへのどちらかの変換が行われます。そして、least-significant-bitが1または0によりtrueまたはfalseへ各々変換されます。valueのランタイム型がプリミティブ・ラッパー・タイプでない場合は、ClassCastExceptionがスローされます。
結果は、次のコードを使用した場合と同じです:
MethodHandle id = MethodHandles.identity(dstType); MethodType mt = MethodType.methodType(dstType, Object.class); MethodHandle conv = MethodHandles.explicitCastArguments(id, mt); return conv.invoke(value);- パラメータ:
lookup- 未使用name- 未使用dstType- 変換の宛先タイプvalue- 変換される値- 戻り値:
- 変換後の値
- スロー:
ClassCastException-dstTypeがvoidの場合、(1)ごとのキャストが失敗した場合、またはdstTypeがプリミティブ型で、valueのランタイム型がプリミティブ・ラッパー・タイプ(Integerなど)でない場合- 導入されたバージョン:
- 15
-