java.lang.Object
java.lang.invoke.ConstantBootstraps
public final class ConstantBootstraps extends Object
動的に計算される定数のブートストラップ・メソッド。
このクラスのブートストラップ・メソッドは、null
値を受け入れる引数を指定しないかぎり、null
である参照引数のNullPointerException
をスローします。
- 導入されたバージョン:
- 11
-
メソッドのサマリー
修飾子と型メソッド説明static VarHandle
arrayVarHandle(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 Object
explicitCast(MethodHandles.Lookup lookup, String name, Class<?> dstType, Object value)
ソース・タイプから宛先タイプへの変換を適用します。static VarHandle
fieldVarHandle(MethodHandles.Lookup lookup, String name, Class<VarHandle> type, Class<?> declaringClass, Class<?> fieldType)
インスタンス・フィールドのVarHandle
を検索します。static Object
getStaticFinal(MethodHandles.Lookup lookup, String name, Class<?> type)
クラスで宣言された静的な最終フィールドの値を返します。この値は、(または、プリミティブ値フィールドの場合はラッパー・クラスで宣言されます。)フィールド・タイプと同じですstatic Object
getStaticFinal(MethodHandles.Lookup lookup, String name, Class<?> type, Class<?> declaringClass)
静的最終フィールドの値を返します。static Object
invoke(MethodHandles.Lookup lookup, String name, Class<?> type, MethodHandle handle, Object... args)
指定された引数を使ってメソッド・ハンドルを呼び出した結果を返します。static Object
nullConstant(MethodHandles.Lookup lookup, String name, Class<?> type)
type
で指定された参照型のnull
オブジェクト参照を戻します。static Class<?>
primitiveClass(MethodHandles.Lookup lookup, String name, Class<?> type)
name
によって型記述子が指定されているプリミティブ型のClass
ミラーを戻します。static VarHandle
staticFieldVarHandle(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型を表さない場合- 関連項目:
Enum.valueOf(Class, String)
-
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
でない場合- 関連項目:
getStaticFinal(MethodHandles.Lookup, String, Class, Class)
-
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
-