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

インタフェースStringTemplate.Processor<R,E extends Throwable>

型パラメータ:
R - プロセッサのプロセス結果タイプ
E - 例外スロー・タイプ
既知のすべての実装クラス:
FormatProcessorPREVIEW
含まれているインタフェース:
StringTemplatePREVIEW
関数型インタフェース:
これは関数型インタフェースなので、ラムダ式またはメソッド参照の代入先として使用できます。

@FunctionalInterface public static interface StringTemplate.Processor<R,E extends Throwable>
Processorは、JavaプラットフォームのプレビューAPIです。
プレビュー機能が有効な場合のみ、プログラムでProcessorを使用できます。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
このインタフェースでは、汎用文字列テンプレート・プロセッサによって提供されるメソッドについて説明します。 プライマリ・メソッドprocess(StringTemplate)は、StringTemplate'sPREVIEWフラグメントおよび値リストを使用して結果を検証および作成するために使用されます。

たとえば、

class MyProcessor implements Processor<String, IllegalArgumentException> {
    @Override
    public String process(StringTemplate st) throws IllegalArgumentException {
         StringBuilder sb = new StringBuilder();
         Iterator<String> fragmentsIter = st.fragments().iterator();

         for (Object value : st.values()) {
             sb.append(fragmentsIter.next());

             if (value instanceof Boolean) {
                 throw new IllegalArgumentException("I don't like Booleans");
             }

             sb.append(value);
         }

         sb.append(fragmentsIter.next());

         return sb.toString();
    }
}

MyProcessor myProcessor = new MyProcessor();
try {
    int x = 10;
    int y = 20;
    String result = myProcessor."\{x} + \{y} = \{x + y}";
    ...
} catch (IllegalArgumentException ex) {
    ...
}
このインタフェースの実装では、入力の検証、結果への入力の作成、および最終結果を提供する前に中間文字列結果の非文字列値への変換を行うことができるが、これらに限定されない場合があります。

ユーザーは、コンポジションで使用される入力を検証できます。 たとえば、SQLプロセッサは、入力をサニタイズするか、SQL文が潜在的な脆弱性である場合はEタイプの例外をスローすることで、インジェクションの脆弱性を防止できます。

作成により、結果の組み立て方法をユーザーが制御できます。 ほとんどの場合、ユーザーは文字列テンプレートから新しい文字列を作成し、プレースホルダーは値リスト要素の文字列表現に置き換えられます。 これらの文字列表現は、String.valueOf(java.lang.Object)を呼び出すかのように作成されます。

変換によって、プロセッサは文字列以外のものを返すことができます。 たとえば、JSONプロセッサは、合成された文字列ではなく、コンポジションによって作成された文字列を解析することで、JSONオブジェクトを返すことができます。

StringTemplate.ProcessorPREVIEWFunctionalInterfaceです。 これにより、ラムダ式を使用したプロセッサの宣言が許可されます

Processor<String, RuntimeException> processor = st -> {
    List<String> fragments = st.fragments();
    List<Object> values = st.values();
    // check or manipulate the fragments and/or values
    ...
    return StringTemplate.interpolate(fragments, values);
};
StringTemplate.interpolate()PREVIEWメソッドは、文字列補間を操作するだけでよいプロセッサで使用できます
Processor<String, RuntimeException> processor = StringTemplate::interpolate;
または、単に文字列補間をString以外のものに変換
Processor<JSONObject, RuntimeException> jsonProcessor = st -> new JSONObject(st.interpolate());

実装上のノート:
Javaコンパイラは、StringTemplate.STRPREVIEWを自動的にインポート
Java言語仕様を参照してください:
「15.8.6 テンプレート式の処理」
導入されたバージョン:
21
関連項目:
  • メソッドの詳細

    • process

      R process(StringTemplatePREVIEW stringTemplate) throws E
      指定されたstringTemplatePREVIEWオブジェクトのテンプレート・フラグメントおよび値に基づいて結果を作成します。
      APIのノート:
      StringTemplatePREVIEWの処理には、各状況に関連する特定のファクトに従って検証が含まれる場合があります。 E型パラメータは、検証に失敗した場合にprocess(java.lang.StringTemplate)によってスローされるチェック済例外のタイプを示します(例: java.sql.SQLException)。 チェック例外が予想されない場合は、RuntimeExceptionを使用できます。 チェックされていない例外(RuntimeExceptionNullPointerExceptionIllegalArgumentExceptionなど)は、通常のメソッド引数処理の一部としてスローされる場合があります。 例外がスローされる詳細は、特定の実装のドキュメントを参照してください。
      パラメータ:
      stringTemplate - StringTemplatePREVIEWインスタンス
      戻り値:
      R型の構成オブジェクト
      例外:
      E - 検証が失敗したときにテンプレート・プロセッサによってスローされた例外
    • of

      static <T> StringTemplate.ProcessorPREVIEW<T,RuntimeException> of(Function<? super StringTemplatePREVIEW,? extends T> process)
      このファクトリ・メソッドを使用すると、ラムダ式から導出されたprocess(java.lang.StringTemplate)メソッドを含むStringTemplate.ProcessorPREVIEWを作成できます。 次に例を示します;
      Processor<String, RuntimeException> mySTR = Processor.of(StringTemplate::interpolate);
      int x = 10;
      int y = 20;
      String str = mySTR."\{x} + \{y} = \{x + y}";
      
      構築されたStringTemplate.ProcessorPREVIEWの結果タイプはラムダ式から導出できるため、このメソッドはvar文で使用できます。 たとえば、上記からmySTRを次のように宣言することもできます
      var mySTR = Processor.of(StringTemplate::interpolate);
      
      RuntimeExceptionは、スローされた想定される例外タイプです。
      型パラメータ:
      T - プロセッサのプロセス結果タイプ
      パラメータ:
      process - 引数としてStringTemplatePREVIEWを取得し、推測結果タイプを返す関数
      戻り値:
      a StringTemplate.ProcessorPREVIEW