- 类型参数:
-
R
- 处理器的处理结果类型 -
E
- 抛出的异常类型
- 所有已知的实现类:
-
FormatProcessor预览
- 封装的接口:
-
StringTemplate预览
- 函数式接口:
- 这是一个函数式接口,因此可以用作lambda表达式或方法引用的赋值目标。
Processor
是Java平台的预览API。
预览功能可能会在将来的版本中被移除,或升级为Java平台的永久功能。
该接口描述了通用字符串模板处理器提供的方法。主要方法
该接口的实现可以提供验证输入、将输入组合成结果以及在提供最终结果之前将中间字符串结果转换为非字符串值等功能。
对于那些只需要处理字符串插值的处理器,可以使用
或者简单地将字符串插值转换为除
process(StringTemplate)
用于验证和组合使用 StringTemplate
预览 片段和值列表的结果。
例如:
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.Processor
预览 是一个 FunctionalInterface
。这允许使用lambda表达式声明处理器;
Processor<String, RuntimeException> processor = st -> {
List<String> fragments = st.fragments();
List<Object> values = st.values();
// 检查或操作片段和/或值
...
return StringTemplate.interpolate(fragments, values);
};
StringTemplate.interpolate()
预览 方法;
Processor<String, RuntimeException> processor = StringTemplate::interpolate;
String
之外的其他内容;
Processor<JSONObject, RuntimeException> jsonProcessor = st -> new JSONObject(st.interpolate());
- 实现注意事项:
-
Java编译器会自动导入
StringTemplate.STR
预览 - 参见 Java语言规范:
-
15.8.6 处理模板表达式
- 自Java版本:
- 21
- 另请参阅:
-
Nested Class Summary
Modifier and TypeInterfaceDescriptionstatic interface
预览。 -
Method Summary
Modifier and TypeMethodDescriptionstatic <T> StringTemplate.ProcessorPREVIEW
<T, RuntimeException> of
(Function<? super StringTemplatePREVIEW, ? extends T> process) 可以使用此工厂方法创建一个包含从lambda表达式派生的StringTemplate.Processor
预览 的对象。process
(StringTemplatePREVIEW stringTemplate) 根据提供的stringTemplate
预览 对象中的模板片段和值构造结果。
-
Method Details
-
process
根据提供的stringTemplate
预览 对象中的模板片段和值构造结果。- API 注意:
-
对
StringTemplate
预览 的处理可能包括根据与每种情况相关的特定事实进行验证。类型参数E
指示在验证失败时由process(java.lang.StringTemplate)
抛出的已检查异常的类型,例如java.sql.SQLException
。如果不希望出现已检查异常,则可以使用RuntimeException
。请注意,作为正常方法参数处理的一部分可能会抛出未检查异常,例如RuntimeException
、NullPointerException
或IllegalArgumentException
。有关抛出的异常的详细信息将在特定实现的文档中找到。 - 参数:
-
stringTemplate
- 一个StringTemplate
预览 实例 - 返回:
- 构造的类型为 R 的对象
- 抛出:
-
E
- 在验证失败时由模板处理器抛出的异常
-
of
static <T> StringTemplate.ProcessorPREVIEW<T,RuntimeException> of(Function<? super StringTemplatePREVIEW, ? extends T> process) 此工厂方法可用于创建一个包含从lambda表达式派生的预览StringTemplate.Processor
,其中包含一个预览process(java.lang.StringTemplate)
方法。例如;Processor<String, RuntimeException> mySTR = Processor.of(StringTemplate::interpolate); int x = 10; int y = 20; String str = mySTR."\{x} + \{y} = \{x + y}";
StringTemplate.Processor
预览的结果类型可以从lambda表达式中派生,因此此方法可以在var语句中使用。例如,上面的mySTR
也可以使用以下方式声明;var mySTR = Processor.of(StringTemplate::interpolate);
RuntimeException
是假定的异常抛出类型。- 类型参数:
-
T
- Processor的处理结果类型 - 参数:
-
process
- 一个接受StringTemplate
预览作为参数并返回推断结果类型的函数 - 返回:
-
一个
StringTemplate.Processor
预览
-
Processor
。