java.lang.Object
java.lang.runtime.TemplateRuntime
TemplateRuntime
是 Java 平台的预览 API。
预览功能可能会在未来的版本中被移除,或升级为 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 Summary
Modifier and TypeMethodDescriptionstatic CallSite
newLargeStringTemplate
(MethodHandles.Lookup lookup, String name, MethodType type) 用于创建大型字符串模板的字符串模板引导方法,即当值槽位数超过StringConcatFactory.MAX_INDY_CONCAT_ARG_SLOTS
预览 时。static CallSite
newStringTemplate
(MethodHandles.Lookup lookup, String name, MethodType type, String... fragments) 用于创建字符串模板的字符串模板引导方法。static CallSite
processStringTemplate
(MethodHandles.Lookup lookup, String name, MethodType type, MethodHandle processorGetter, String... fragments) 用于静态最终处理器的字符串模板引导方法。
-
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
- 如果链接失败
-
TemplateRuntime
。