モジュール java.base
パッケージ java.lang.invoke

クラスConstantBootstraps

java.lang.Object
java.lang.invoke.ConstantBootstraps

public final class ConstantBootstraps extends Object
動的に計算される定数のブートストラップ・メソッド。

このクラスのブートストラップ・メソッドは、null値を受け入れる引数を指定しないかぎり、nullである参照引数のNullPointerExceptionをスローします。

導入されたバージョン:
11
  • メソッドの詳細

    • 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の場合、次のいずれかが発生します:

      • dstTypevoid.classの場合、ClassCastExceptionがスローされます。
      • dstTypeObject.classの場合、valueはそのまま返されます。

      それ以外の場合は、次のいずれかの変換がvalueに適用されます:

      1. dstTypeが参照型の場合、dstType.cast(value)をコールするかのように、参照キャストがvalueに適用されます。
      2. dstTypeがプリミティブ・タイプの場合、そして、valueのランタイム・タイプがプリミティブ・ラッパー・タイプ(Integerなど)であれば、Javaアン・ボクシング変換が適用され5.1.8、その後にJavaキャスティング変換、直接dstTypeへの変換、または、dstTypebooleanならば、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 - dstTypevoidの場合、(1)ごとのキャストが失敗した場合、またはdstTypeがプリミティブ型で、valueのランタイム型がプリミティブ・ラッパー・タイプ(Integerなど)でない場合
      導入されたバージョン:
      15