java.lang.Object
java.lang.runtime.SwitchBootstraps
SwitchBootstraps 是 Java 平台的预览 API。
预览功能可能会在未来的版本中删除,或升级为 Java 平台的永久功能。
用于链接实现
switch 语句的选择功能的 invokedynamic 调用站点的引导方法。引导程序采用与 switch 的 case 标签相对应的额外静态参数,从 [0..N) 隐含地按顺序编号。
- 自从:
- 17
-
方法总结
修饰符和类型方法描述static CallSiteenumSwitch(MethodHandles.Lookup lookup, String invocationName, MethodType invocationType, Object... labels) 用于链接在枚举类型的目标上实现switch的invokedynamic调用站点的引导方法。static CallSitetypeSwitch(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调用站点的引导方法。静态参数是一个 case 标签数组,它必须是非空的并且类型为String或Integer或Class。返回的
CallSite方法句柄的类型将具有int的返回类型。它有两个参数:第一个参数是Object实例 (target),第二个参数是int(restart)。如果
target是null,则调用站点的方法返回 -1。如果
target不是null,则调用站点的方法返回labels数组中第一个元素的索引,从restart索引开始匹配以下条件之一:- 该元素的类型为
Class,可从目标的类中分配;或者 - 元素的类型为
String或Integer并且等于目标。
如果
labels数组中没有元素与目标匹配,则调用站点的方法返回labels数组的长度。- 参数:
lookup- 表示具有调用者可访问权限的查找上下文。当与invokedynamic一起使用时,它由 VM 自动堆叠。invocationName- 未使用invocationType-CallSite的调用类型有两个参数,一个引用类型,一个int和int作为返回类型。labels- 案例标签 -String和Integer常量以及Class实例,任意组合- 返回:
CallSite如上所述返回第一个匹配元素- 抛出:
NullPointerException- 如果任何参数是nullIllegalArgumentException- 如果标签数组中的任何元素为 null,如果调用类型不是引用类型的第一个参数的方法类型,第二个参数的类型为int且以int作为其返回类型,或者如果labels包含一个元素不是String、Integer或Class类型。- 看Java 虚拟机规范:
-
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 标签,其中每个标签可以用两种方式编码:- 作为
String值,表示与标签关联的枚举常量的名称 - 作为
Class值,表示与类型测试模式关联的枚举类型
返回的
CallSite的方法句柄将具有int的返回类型并接受两个参数:第一个参数将是Enum实例 (target),第二个将是int(restart)。如果
target是null,则调用站点的方法返回 -1。如果
target不是null,则调用站点的方法返回labels数组中第一个元素的索引,从restart索引开始匹配以下条件之一:- 该元素的类型为
Class,可从目标的类中分配;或者 - 该元素的类型为
String并且等于目标枚举常量的Enum.name()。
如果
labels数组中没有元素与目标匹配,则调用站点的方法返回labels数组的长度。- 参数:
lookup- 表示具有调用者可访问权限的查找上下文。当与invokedynamic一起使用时,它由 VM 自动堆叠。invocationName- 未使用invocationType-CallSite的调用类型有两个参数,一个枚举类型,一个int和int作为返回类型。labels- 案例标签 -String常量和Class实例,任意组合- 返回:
CallSite如上所述返回第一个匹配元素- 抛出:
NullPointerException- 如果任何参数是nullIllegalArgumentException- 如果标签数组中的任何元素为 null,如果调用类型不是第一个参数类型为枚举类型的方法类型,第二个参数类型为int并且其返回类型为int,或者如果labels包含一个元素是不是目标枚举类型的String或Class类型。- 看Java 虚拟机规范:
-
4.4.6 CONSTANT_NameAndType_info结构
4.4.10 CONSTANT_Dynamic_info和CONSTANT_InvokeDynamic_info结构
- 作为
-
SwitchBootstraps。