モジュール 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
関連項目: