模块 java.base

类 SwitchBootstraps

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

public class SwitchBootstraps extends Object
SwitchBootstraps 是 Java 平台的预览 API。
程序只能在启用预览功能时使用 SwitchBootstraps
预览功能可能会在未来的版本中删除,或升级为 Java 平台的永久功能。
用于链接实现 switch 语句的选择功能的 invokedynamic 调用站点的引导方法。引导程序采用与 switchcase 标签相对应的额外静态参数,从 [0..N) 隐含地按顺序编号。
自从:
17
  • 方法详情

    • typeSwitch

      public static CallSite  typeSwitch(MethodHandles.Lookup  lookup, String  invocationName, MethodType  invocationType, Object ... labels)
      用于链接在引用类型的目标上实现 switchinvokedynamic 调用站点的引导方法。静态参数是一个 case 标签数组,它必须是非空的并且类型为 StringIntegerClass

      返回的 CallSite 方法句柄的类型将具有 int 的返回类型。它有两个参数:第一个参数是 Object 实例 (target),第二个参数是 int (restart)。

      如果 targetnull ,则调用站点的方法返回 -1。

      如果 target 不是 null ,则调用站点的方法返回 labels 数组中第一个元素的索引,从 restart 索引开始匹配以下条件之一:

      • 该元素的类型为 Class ,可从目标的类中分配;或者
      • 元素的类型为 StringInteger 并且等于目标。

      如果 labels 数组中没有元素与目标匹配,则调用站点的方法返回 labels 数组的长度。

      参数:
      lookup - 表示具有调用者可访问权限的查找上下文。当与 invokedynamic 一起使用时,它由 VM 自动堆叠。
      invocationName - 未使用
      invocationType - CallSite 的调用类型有两个参数,一个引用类型,一个 intint 作为返回类型。
      labels - 案例标签 - StringInteger 常量以及 Class 实例,任意组合
      返回:
      CallSite 如上所述返回第一个匹配元素
      抛出:
      NullPointerException - 如果任何参数是 null
      IllegalArgumentException - 如果标签数组中的任何元素为 null,如果调用类型不是引用类型的第一个参数的方法类型,第二个参数的类型为 int 且以 int 作为其返回类型,或者如果 labels 包含一个元素不是 StringIntegerClass 类型。
      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)
      用于链接在枚举类型的目标上实现 switchinvokedynamic 调用站点的引导方法。静态参数用于编码与 switch 构造关联的 case 标签,其中每个标签可以用两种方式编码:
      • 作为 String 值,表示与标签关联的枚举常量的名称
      • 作为 Class 值,表示与类型测试模式关联的枚举类型

      返回的 CallSite 的方法句柄将具有 int 的返回类型并接受两个参数:第一个参数将是 Enum 实例 (target),第二个将是 int (restart)。

      如果 targetnull ,则调用站点的方法返回 -1。

      如果 target 不是 null ,则调用站点的方法返回 labels 数组中第一个元素的索引,从 restart 索引开始匹配以下条件之一:

      • 该元素的类型为 Class ,可从目标的类中分配;或者
      • 该元素的类型为 String 并且等于目标枚举常量的 Enum.name()

      如果 labels 数组中没有元素与目标匹配,则调用站点的方法返回 labels 数组的长度。

      参数:
      lookup - 表示具有调用者可访问权限的查找上下文。当与 invokedynamic 一起使用时,它由 VM 自动堆叠。
      invocationName - 未使用
      invocationType - CallSite 的调用类型有两个参数,一个枚举类型,一个 intint 作为返回类型。
      labels - 案例标签 - String 常量和 Class 实例,任意组合
      返回:
      CallSite 如上所述返回第一个匹配元素
      抛出:
      NullPointerException - 如果任何参数是 null
      IllegalArgumentException - 如果标签数组中的任何元素为 null,如果调用类型不是第一个参数类型为枚举类型的方法类型,第二个参数类型为 int 并且其返回类型为 int,或者如果 labels 包含一个元素是不是目标枚举类型的 StringClass 类型。
      Java 虚拟机规范:
      4.4.6 CONSTANT_NameAndType_info结构
      4.4.10 CONSTANT_Dynamic_info和CONSTANT_InvokeDynamic_info结构