モジュール java.base
パッケージ java.lang.runtime

クラスTemplateRuntime

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

public final class TemplateRuntime extends Object
TemplateRuntimeは、JavaプラットフォームのプレビューAPIです。
プレビュー機能が有効な場合のみ、プログラムでTemplateRuntimeを使用できます。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
文字列テンプレートのブートストラップ・メソッドを管理します。 これらのメソッドは、たとえば、Javaコンパイラ実装によってStringTemplatePREVIEWインスタンスを作成するために使用できます。 たとえば、javaコンパイラは次のコードを変換
int x = 10;
int y = 20;
StringTemplate st = RAW."\{x} + \{y} = \{x + y}";
2つの整数を受け入れ、新しい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
  • メソッドの詳細

    • newStringTemplate

      public static CallSite newStringTemplate(MethodHandles.Lookup lookup, String name, MethodType type, String... fragments) throws Throwable
      文字列テンプレートを作成するための文字列テンプレート・ブートストラップ・メソッド。 静的引数にはフラグメント・リストが含まれます。 非静的引数は値です。
      パラメータ:
      lookup - コール・サイトからのメソッド・ルックアップ
      name - メソッド名 - 未使用
      type - メソッド・タイプ(ptypes...) -> 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_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 - リンクが失敗した場合