クラスSwitchBootstraps

java.lang.Object
java.lang.runtime.SwitchBootstraps

public finalクラスSwitchBootstrapsオブジェクトを拡張します。
switch文の選択機能を実装するinvokedynamicコール・サイトをリンクするためのブートストラップ・メソッド。 ブートストラップは、switchcaseラベルに対応する追加の静的引数を取り、暗黙的に[0..N)から番号付けします。
導入されたバージョン:
21
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    static CallSite
    enumSwitch(MethodHandles.Lookup lookup, String invocationName, MethodType invocationType, Object... labels)
    列挙型のターゲットにswitchを実装するinvokedynamicコール・サイトをリンクするためのブートストラップ・メソッド。
    static CallSite
    typeSwitch(MethodHandles.Lookup lookup, String invocationName, MethodType invocationType, Object... labels)
    参照タイプのターゲットにswitchを実装するinvokedynamicコール・サイトをリンクするためのブートストラップ・メソッド。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • メソッドの詳細

    • typeSwitch

      public static CallSite typeSwitch(MethodHandles.Lookup lookup, String invocationName, MethodType invocationType, Object... labels)
      参照タイプのターゲットにswitchを実装するinvokedynamicコール・サイトをリンクするためのブートストラップ・メソッド。 静的引数は、null以外で、StringIntegerClassまたはEnumDesc型の大/小文字ラベルの配列です。

      返されるCallSiteのメソッド・ハンドルのタイプは、intという戻り型になります。 2つのパラメータがあります: 最初の引数はObjectインスタンス(target)で、2番目の引数はint (restart)になります。

      targetnullの場合、コール・サイトのメソッドは -1を返します。

      targetnullでない場合、コール・サイトのメソッドは、次のいずれかの条件に一致するrestart索引から始まるlabels配列内の最初の要素の索引を返します:

      • 要素のタイプがClassで、ターゲット・クラスから割当て可能です。または
      • 要素のタイプはStringまたはIntegerで、ターゲットと同等です。
      • 要素のタイプはEnumDescで、ターゲットと等しい定数を記述します。

      labels配列内の要素がターゲットと一致しない場合、コール・サイトのメソッドはlabels配列の長さを返します。

      restart索引の値は、0 (包含)からlabels配列(包含)の長さの間にある必要があります。そうでない場合、両方ともIndexOutOfBoundsExceptionがスローされます。

      パラメータ:
      lookup - コール元のアクセシビリティ権限を持つルックアップ・コンテキストを表します。 invokedynamicで使用されるときは、これはVMによって自動的にスタックされます。
      invocationName - 未使用、nullが許可されている
      invocationType - 2つのパラメータ(参照タイプ、intおよびint)を含むCallSiteの起動タイプ。
      labels - ケース・ラベル - StringおよびInteger定数と、任意の組合せのClassおよびEnumDescインスタンス
      戻り値:
      前述のとおり、CallSiteは最初の一致する要素を返します
      スロー:
      NullPointerException - 特に明記されていないかぎり、引数がnullの場合
      IllegalArgumentException - label配列の要素がnullの場合
      IllegalArgumentException - 呼出し型が参照型の最初のパラメータのメソッド型でない場合、int型の2番目のパラメータ、およびintの戻り型
      IllegalArgumentException - labelsString型、Integer型、Long型、Float型、Double型、Boolean型、Class型またはEnumDesc型の要素が含まれている場合
      IllegalArgumentException - targetBoolean.classの場合、labelsBoolean型でない要素が含まれている場合
      Java Virtual Machine仕様を参照してください:
      「4.4.6 CONSTANT_NameAndType_info構造」
      「4.4.10 CONSTANT_Dynamic_infoおよびCONSTANT_InvokeDynamic_info構造」
    • enumSwitch

      public static CallSite enumSwitch(MethodHandles.Lookup lookup, String invocationName, MethodType invocationType, Object... labels)
      列挙型のターゲットにswitchを実装するinvokedynamicコール・サイトをリンクするためのブートストラップ・メソッド。 静的引数は、switchコンストラクトに関連付けられたcaseのラベルのエンコードに使用されます。ここでは、各ラベルを2つの方法でエンコードできます:
      • String値として、ラベルに関連付けられている列挙定数の名前を表します
      • Class値として、タイプ・テスト・パターンに関連付けられた列挙型を表します

      返されたCallSiteのメソッド・ハンドルの戻り型はintで、2つのパラメータを受け入れます: 最初の引数はEnumインスタンス(target)で、2番目の引数はint (restart)になります。

      targetnullの場合、コール・サイトのメソッドは -1を返します。

      targetnullでない場合、コール・サイトのメソッドは、次のいずれかの条件に一致するrestart索引から始まるlabels配列内の最初の要素の索引を返します:

      • 要素のタイプがClassで、ターゲット・クラスから割当て可能です。または
      • 要素のタイプはStringで、ターゲット列挙定数Enum.name()と同等です。

      特定のtargetについて、前述の条件の1つを満たす要素がlabelsにない場合、コール・サイトのメソッドはlabels配列の長さを返します。

      restart索引の値は、0 (この値を含む)とlabels配列の長さ(この値を含む)の間にする必要があります。そうしないと、IndexOutOfBoundsExceptionがスローされます。

      APIのノート:
      labels配列には、実行時にenum定数を表さないString値を含めることができます。
      パラメータ:
      lookup - コール元のアクセシビリティ権限を持つルックアップ・コンテキストを表します。 invokedynamicで使用されるときは、これはVMによって自動的にスタックされます。
      invocationName - 未使用、nullが許可されている
      invocationType - 2つのパラメータ(列挙型、intおよびintの戻り型)を持つCallSiteの起動タイプ。
      labels - ケース・ラベル - String定数およびClassインスタンスの任意の組合せ
      戻り値:
      前述のとおり、CallSiteは最初の一致する要素を返します
      スロー:
      NullPointerException - 特に明記されていないかぎり、引数がnullの場合
      IllegalArgumentException - label配列の要素がnullの場合
      IllegalArgumentException - label配列の要素が空のStringである場合
      IllegalArgumentException - 呼出し型が、最初のパラメータ型が列挙型であるメソッド型ではなく、int型の2番目のパラメータで、戻り型がintの場合
      IllegalArgumentException - labelsに、ターゲット列挙型と等しいString型またはClass型の要素が含まれていない場合
      Java Virtual Machine仕様を参照してください:
      「4.4.6 CONSTANT_NameAndType_info構造」
      「4.4.10 CONSTANT_Dynamic_infoおよびCONSTANT_InvokeDynamic_info構造」