Module java.base
Package java.lang

Interface StringTemplate.Processor<R,E extends Throwable>

Type Parameters:
R - Processor's process result type
E - Exception thrown type
All Known Implementing Classes:
Enclosing interface:
Functional Interface:
This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.

@FunctionalInterface public static interface StringTemplate.Processor<R,E extends Throwable>
Processor is a preview API of the Java platform.
Programs can only use Processor when preview features are enabled.
Preview features may be removed in a future release, or upgraded to permanent features of the Java platform.
This interface describes the methods provided by a generalized string template processor. The primary method process(StringTemplate) is used to validate and compose a result using a StringTemplate'sPREVIEW fragments and values lists.

For example:

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

         for (Object value : st.values()) {

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



         return sb.toString();

MyProcessor myProcessor = new MyProcessor();
try {
    int x = 10;
    int y = 20;
    String result = myProcessor."\{x} + \{y} = \{x + y}";
} catch (IllegalArgumentException ex) {
Implementations of this interface may provide, but are not limited to, validating inputs, composing inputs into a result, and transforming an intermediate string result to a non-string value before delivering the final result.

The user has the option of validating inputs used in composition. For example an SQL processor could prevent injection vulnerabilities by sanitizing inputs or throwing an exception of type E if an SQL statement is a potential vulnerability.

Composing allows user control over how the result is assembled. Most often, a user will construct a new string from the string template, with placeholders replaced by string representations of value list elements. These string representations are created as if invoking String.valueOf(java.lang.Object).

Transforming allows the processor to return something other than a string. For instance, a JSON processor could return a JSON object, by parsing the string created by composition, instead of the composed string.

StringTemplate.ProcessorPREVIEW is a FunctionalInterface. This permits declaration of a processor using lambda expressions;

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);
The StringTemplate.interpolate()PREVIEW method is available for those processors that just need to work with the string interpolation;
Processor<String, RuntimeException> processor = StringTemplate::interpolate;
or simply transform the string interpolation into something other than String;
Processor<JSONObject, RuntimeException> jsonProcessor = st -> new JSONObject(st.interpolate());
Implementation Note:
The Java compiler automatically imports StringTemplate.STRPREVIEW
See Java Language Specification:
15.8.6 Process Template Expressions
See Also: