Module java.base

Class TemplateRuntime

java.lang.Object
java.lang.runtime.TemplateRuntime

public final class TemplateRuntime extends Object
TemplateRuntime 是 Java 平台的预览 API。
仅当启用预览功能时,程序才能使用 TemplateRuntime
预览功能可能会在未来的版本中被移除,或升级为 Java 平台的永久功能。
管理字符串模板引导方法。例如,Java 编译器实现可以使用这些方法来创建 StringTemplate预览 实例。例如,Java 编译器将转换以下代码;
int x = 10;
int y = 20;
StringTemplate st = RAW."\{x} + \{y} = \{x + y}";
为调用 newStringTemplate(java.lang.invoke.MethodHandles.Lookup, java.lang.String, java.lang.invoke.MethodType, java.lang.String...) 引导方法以构造接受两个整数并生成新的 StringTemplate预览 实例的字节码。
MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodType mt = MethodType.methodType(StringTemplate.class, int.class, int.class);
CallSite cs = TemplateRuntime.newStringTemplate(lookup, "", mt, "", " + ", " = ", "");
...
int x = 10;
int y = 20;
StringTemplate st = (StringTemplate)cs.getTarget().invokeExact(x, y);
如果字符串模板需要超过 StringConcatFactory.MAX_INDY_CONCAT_ARG_SLOTS预览 值槽位,则 Java 编译器将使用 newLargeStringTemplate(java.lang.invoke.MethodHandles.Lookup, java.lang.String, java.lang.invoke.MethodType) 引导方法。例如,Java 编译器将转换以下代码;
int[] a = new int[1000], b = new int[1000];
...
StringTemplate st = """
     \{a[0]} - \{b[0]}
     \{a[1]} - \{b[1]}
     ...
     \{a[999]} - \{b[999]}
     """;
为调用 newLargeStringTemplate(java.lang.invoke.MethodHandles.Lookup, java.lang.String, java.lang.invoke.MethodType) 引导方法以构造接受整数数组并生成新的 StringTemplate预览 实例的字节码。
MethodType mt = MethodType.methodType(StringTemplate.class, String[].class, Object[].class);
CallSite cs = TemplateRuntime.newStringTemplate(lookup, "", mt);
...
int[] a = new int[1000], b = new int[1000];
...
StringTemplate st = (StringTemplate)cs.getTarget().invokeExact(
        new String[] { "", " - ", "\n", " - ", "\n", ... " - ", "\n" },
        new Object[] { a[0], b[0], a[1], b[1], ..., a[999], b[999]}
        );
自 JDK 版本:
21
  • Method Details

    • newStringTemplate

      public static CallSite newStringTemplate(MethodHandles.Lookup lookup, String name, MethodType type, String... fragments) throws Throwable
      用于创建字符串模板的字符串模板引导方法。静态参数包括片段列表。非静态参数是值。
      参数:
      lookup - 来自调用站点的方法查找
      name - 方法名称 - 未使用
      type - 方法类型 (参数类型...) -> StringTemplate
      fragments - 字符串模板的片段数组
      返回:
      处理创建字符串模板的 CallSite
      抛出:
      NullPointerException - 如果任何参数为 null
      Throwable - 如果链接失败
    • newLargeStringTemplate

      public static CallSite newLargeStringTemplate(MethodHandles.Lookup lookup, String name, MethodType type) throws Throwable
      用于创建大型字符串模板的字符串模板引导方法,即当值槽位数超过 StringConcatFactory.MAX_INDY_CONCAT_ARG_SLOTS预览 时。非静态参数是片段数组和值数组。
      参数:
      lookup - 来自调用站点的方法查找
      name - 方法名称 - 未使用
      type - 方法类型 (String[], Object[]) -> StringTemplate
      返回:
      处理创建大型字符串模板的 CallSite
      抛出:
      NullPointerException - 如果任何参数为 null
      Throwable - 如果链接失败
    • processStringTemplate

      public static CallSite processStringTemplate(MethodHandles.Lookup lookup, String name, MethodType type, MethodHandle processorGetter, String... fragments) throws Throwable
      用于静态最终处理器的字符串模板引导方法。静态参数包括片段数组和用于检索静态最终处理器值的 MethodHandle。非静态参数是值。
      实现说明:
      在退出预览之前,此方法可能会进行改进。
      参数:
      lookup - 来自调用站点的方法查找
      name - 方法名称 - 未使用
      type - 方法类型 (参数类型...) -> Object
      processorGetter - 用于获取静态最终处理器的 MethodHandle
      fragments - 字符串模板的片段
      返回:
      处理字符串模板处理的 CallSite
      抛出:
      NullPointerException - 如果任何参数为 null
      Throwable - 如果链接失败