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

インタフェースStringTemplate


public interface StringTemplate
StringTemplateは、JavaプラットフォームのプレビューAPIです。
プレビュー機能が有効な場合のみ、プログラムでStringTemplateを使用できます。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
StringTemplatePREVIEWは、テンプレート式内の文字列テンプレートまたはテキスト・ブロック・テンプレートの実行時表現です。

Javaプログラムのソース・コードでは、文字列テンプレートまたはテキスト・ブロック・テンプレートに、「フラグメント・リテラル」および「埋込み式」のインタリーブ後継が含まれます。 fragments()メソッドはフラグメント・リテラルを返し、values()メソッドは埋込み式を評価した結果を返します。 StringTemplatePREVIEWでは、埋込み式自体のソース・コードへのアクセスは提供されません。文字列テンプレートまたはテキスト・ブロック・テンプレートのコンパイル時表現ではありません。

StringTemplatePREVIEWは主にテンプレート・プロセッサと組み合せて使用され、文字列またはその他の意味のある値を生成します。 テンプレート式の評価では、最初にテンプレート式の右側を表すStringTemplatePREVIEWのインスタンスが生成され、次にテンプレート式によって指定されたテンプレート・プロセッサにインスタンスが渡されます。

たとえば、次のコードには、テンプレート・プロセッサRAWを使用するテンプレート式が含まれています。テンプレート・プロセッサRAWでは、渡されたStringTemplatePREVIEWが単に生成されます:

int x = 10;
int y = 20;
StringTemplate st = RAW."\{x} + \{y} = \{x + y}";
List<String> fragments = st.fragments();
List<Object> values = st.values();
fragmentsは、空の最初と最後のフラグメントを含むList.of("", " + ", " = ", "")と同等です。valuesは、List.of(10, 20, 30)と同等です。

次のコードには、同じテンプレートを使用するテンプレート式が含まれていますが、テンプレート・プロセッサSTRは異なります:

int x = 10;
int y = 20;
String s = STR."\{x} + \{y} = \{x + y}";
テンプレート式が評価されると、StringTemplatePREVIEWのインスタンスが生成され、前述のようにfragments()およびvalues()から同じリストが返されます。 STRテンプレート・プロセッサは、これらのリストを使用して補間された文字列を生成します。 sの値は、"10 + 20 = 30"と同等です。

interpolate()メソッドは、StringTemplatePREVIEWの文字列補間を実行する直接的な方法を提供します。 テンプレート・プロセッサでは、次のコード・パターンを使用できます:

List<String> fragments = st.fragments();
List<Object> values    = st.values();
... check or manipulate the fragments and/or values ...
String result = StringTemplate.interpolate(fragments, values);
process(Processor)メソッドをRAWプロセッサと組み合せて使用すると、StringTemplatePREVIEWの処理を遅延できます。
StringTemplate st = RAW."\{x} + \{y} = \{x + y}";
...other steps...
String result = st.process(STR);
ファクトリ・メソッドof(String)およびof(List, List)を使用して、StringTemplatePREVIEWを構築できます。

実装上のノート:
StringTemplatePREVIEWの実装では、fragments()およびvalues()メソッドを最小限に実装する必要があります。 StringTemplatePREVIEWのインスタンスは不変とみなされます。 文字列テンプレートおよびテキスト・ブロック・テンプレートのセマンティクスを保持するには、fragments()によって返されるリストは、values()によって返されるリストより大きい1つの要素である必要があります。
Java言語仕様を参照してください:
「15.8.6 テンプレート式の処理」
導入されたバージョン:
21
関連項目: