java.lang.Object
java.lang.runtime.TemplateRuntime
public final class TemplateRuntime extends Object
TemplateRuntimeは、JavaプラットフォームのプレビューAPIです。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
文字列テンプレートのブートストラップ・メソッドを管理します。 これらのメソッドは、たとえば、Javaコンパイラ実装によって
2つの整数を受け入れ、新しい
文字列テンプレートに
整数の配列を受け入れ、新しい
StringTemplatePREVIEWインスタンスを作成するために使用できます。 たとえば、javaコンパイラは次のコードを変換
int x = 10;
int y = 20;
StringTemplate st = RAW."\{x} + \{y} = \{x + y}";
StringTemplatePREVIEWインスタンスを生成するCallSiteを構築するためにnewStringTemplate(java.lang.invoke.MethodHandles.Lookup, java.lang.String, java.lang.invoke.MethodType, java.lang.String...)ブートストラップ・メソッドを呼び出すバイト・コード。
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_SLOTSPREVIEW以上の値スロットが必要な場合、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]}
""";
StringTemplatePREVIEWインスタンスを生成するCallSiteを構築するために、newLargeStringTemplate(java.lang.invoke.MethodHandles.Lookup, java.lang.String, java.lang.invoke.MethodType)ブートストラップ・メソッドを呼び出すバイト・コード。
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]}
);
- 導入されたバージョン:
- 21
-
メソッドのサマリー
修飾子と型メソッド説明static CallSitenewLargeStringTemplate(MethodHandles.Lookup lookup, String name, MethodType type) 大きな文字列テンプレートを作成するための文字列テンプレート・ブートストラップ・メソッド(つまり、値スロット数がStringConcatFactory.MAX_INDY_CONCAT_ARG_SLOTSPREVIEWを超える場合)。static CallSitenewStringTemplate(MethodHandles.Lookup lookup, String name, MethodType type, String... fragments) 文字列テンプレートを作成するための文字列テンプレート・ブートストラップ・メソッド。static CallSiteprocessStringTemplate(MethodHandles.Lookup lookup, String name, MethodType type, MethodHandle processorGetter, String... fragments) 静的最終プロセッサの文字列テンプレート・ブートストラップ・メソッド。
-
メソッドの詳細
-
newStringTemplate
public static CallSite newStringTemplate(MethodHandles.Lookup lookup, String name, MethodType type, String... fragments) throws Throwable 文字列テンプレートを作成するための文字列テンプレート・ブートストラップ・メソッド。 静的引数にはフラグメント・リストが含まれます。 非静的引数は値です。- パラメータ:
lookup- コール・サイトからのメソッド・ルックアップname- メソッド名 - 未使用type- メソッド・タイプ(ptypes...) -> StringTemplatefragments- 文字列テンプレートのフラグメント配列- 戻り値:
CallSite:作成文字列テンプレートを処理- 例外:
NullPointerException- 引数のいずれかがnullの場合Throwable- リンクが失敗した場合
-
newLargeStringTemplate
public static CallSite newLargeStringTemplate(MethodHandles.Lookup lookup, String name, MethodType type) throws Throwable 大きな文字列テンプレートを作成するための文字列テンプレート・ブートストラップ・メソッド(つまり、値スロット数がStringConcatFactory.MAX_INDY_CONCAT_ARG_SLOTSPREVIEWを超える場合)。 非静的引数は、フラグメント配列と値の配列です。- パラメータ:
lookup- コール・サイトからのメソッド・ルックアップname- メソッド名 - 未使用type- メソッド・タイプ(文字列[]、オブジェクト[]) -> 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- メソッド・タイプ(ptypes...) ->オブジェクトprocessorGetter-MethodHandle:静的最終プロセッサを取得fragments- 文字列テンプレートからのフラグメント- 戻り値:
- 文字列テンプレートの処理を処理する
CallSite - 例外:
NullPointerException- 引数のいずれかがnullの場合Throwable- リンクが失敗した場合
-
TemplateRuntimeを使用できます。