FreeMarker Java 8 可选值支持

use*_*651 5 freemarker optional java-8

FreeMarker 是否支持 Java 8 中的 Optional 值?

例如,我有 String id,它的 getter 方法是这样的:

public Optional<String> getId() {
  return Optional.ofNullable(Id);
}
Run Code Online (Sandbox Code Playgroud)

我将如何在 .ftl 文件中引用它。似乎 {data.id} 找不到正确的 Optional 值。但给了我 Optional[1334586]

mar*_*kin 6

好吧,Freemarker 不应该知道 Optional 或者最好说它是动态类型的,因此它适用于任何对象。

既然你调用$ {} data.id它只是电话toStringOptional这完全是预期的行为。

如果您想在模板中处理空值并为此使用Optional,您可以选择设置默认值如果为空,Optional则不需要使用:

    Synopsis: unsafe_expr!default_expr or unsafe_expr! or (unsafe_expr)!default_expr or (unsafe_expr)!
    Example: ${data.id!"No id."}
Run Code Online (Sandbox Code Playgroud)

或者检查它是否存在:

<#if data?? && data.id??>
  Id found
<#else>
  Id not found
</#if>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看 Freemarker文档。具体部分:处理缺失值和缺失值测试运算符。

如果您只想从Optional模板中获取值:

${data.id.orElse('')}
Run Code Online (Sandbox Code Playgroud)

或者

${data.id.get()!''}
Run Code Online (Sandbox Code Playgroud)