java.lang.Object
java.lang.runtime.SwitchBootstraps
public class SwitchBootstraps extends Object
SwitchBootstraps
は、JavaプラットフォームのプレビューAPIです。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
switch
文の選択機能を実装するinvokedynamic
コール・サイトをリンクするためのブートストラップ・メソッド。 ブートストラップは、switch
のcase
ラベルに対応する追加の静的引数を取り、暗黙的に[0..N)
から番号付けします。 - 導入されたバージョン:
- 17
-
メソッドのサマリー
修飾子と型メソッド説明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
コール・サイトをリンクするためのブートストラップ・メソッド。
-
メソッドの詳細
-
typeSwitch
public static CallSite typeSwitch(MethodHandles.Lookup lookup, String invocationName, MethodType invocationType, Object... labels) 参照タイプのターゲットにswitch
を実装するinvokedynamic
コール・サイトをリンクするためのブートストラップ・メソッド。 静的引数は、NULL以外で、String
またはInteger
またはClass
タイプの大/小文字ラベルの配列です。返される
CallSite
のメソッド・ハンドルのタイプは、int
という戻り型になります。 2つのパラメータがあります: 最初の引数はObject
インスタンス(target
)で、2番目の引数はint
(restart
)になります。target
がnull
の場合、コール・サイトのメソッドは -1を返します。target
がnull
でない場合、コール・サイトのメソッドは、次のいずれかの条件に一致するrestart
索引から始まるlabels
配列内の最初の要素の索引を返します:- 要素のタイプが
Class
で、ターゲット・クラスから割当て可能です。または - 要素のタイプは
String
またはInteger
で、ターゲットと同等です。
labels
配列内の要素がターゲットと一致しない場合、コール・サイトのメソッドはlabels
配列の長さを返します。- パラメータ:
lookup
- 呼び出し元のアクセシビリティ権限を持つ参照コンテキストを表します。invokedynamic
で使用されるときは、これはVMによって自動的にスタックされます。invocationName
- 未使用invocationType
- 2つのパラメータ(参照タイプ、int
およびint
)を含むCallSite
の起動タイプ。labels
- ケース・ラベル -String
およびInteger
定数およびClass
インスタンスの任意の組合せ- 戻り値:
- 前述のとおり、
CallSite
は最初の一致する要素を返します - 例外:
NullPointerException
- 引数が1つの場合はnull
IllegalArgumentException
- ラベル配列内のいずれかの要素がNULLの場合、呼出しタイプが参照タイプの第1パラメータのメソッド・タイプでない場合、int
型の第2パラメータ、および戻り型としてint
の2番目のパラメータでない場合、またはlabels
に、タイプString
、Integer
またはClass
ではない要素が含まれている場合。- 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
)になります。target
がnull
の場合、コール・サイトのメソッドは -1を返します。target
がnull
でない場合、コール・サイトのメソッドは、次のいずれかの条件に一致するrestart
索引から始まるlabels
配列内の最初の要素の索引を返します:- 要素のタイプが
Class
で、ターゲット・クラスから割当て可能です。または - 要素のタイプは
String
で、ターゲット列挙定数Enum.name()
と同等です。
labels
配列内の要素がターゲットと一致しない場合、コール・サイトのメソッドはlabels
配列の長さを返します。- パラメータ:
lookup
- 呼び出し元のアクセシビリティ権限を持つ参照コンテキストを表します。invokedynamic
で使用されるときは、これはVMによって自動的にスタックされます。invocationName
- 未使用invocationType
- 2つのパラメータ(列挙型、int
およびint
の戻り型)を持つCallSite
の起動タイプ。labels
- ケース・ラベル -String
定数およびClass
インスタンスの任意の組合せ- 戻り値:
- 前述のとおり、
CallSite
は最初の一致する要素を返します - 例外:
NullPointerException
- 引数が1つの場合はnull
IllegalArgumentException
- ラベル配列内のいずれかの要素がNULLの場合、起動タイプが、最初のパラメータ・タイプが列挙型であるメソッド・タイプではない場合、int
型の2番目のパラメータ、戻り型がint
である場合、またはlabels
にターゲット列挙型のString
またはClass
型ではない要素が含まれる場合。- Java Virtual Machine仕様を参照してください:
-
「4.4.6 CONSTANT_NameAndType_info構造」
「4.4.10 CONSTANT_Dynamic_infoおよびCONSTANT_InvokeDynamic_info構造」
-
SwitchBootstraps
を使用できます。