如何从可能返回null的方法中分配变量?

Geo*_*met 8 java freemarker

我有以下代码,我将Java方法的结果分配给freemarker变量.

<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)>
Run Code Online (Sandbox Code Playgroud)

问题是该Java方法的返回值可能null.即使我检查该变量是否不是null:

<#if !singleBenchmark??>
    <td></td>
<#else>
    <td>${singleBenchmark.score}</td>
</#if>
Run Code Online (Sandbox Code Playgroud)

<#assign ...>如果Java方法返回null,它仍会在行上崩溃,但有以下异常:

freemarker.core.InvalidReferenceException: Error on line 109, column 45 in index.html.ftl
solverBenchmark.findSingleBenchmark(problemBenchmark) is undefined.
It cannot be assigned to singleBenchmark
    at freemarker.core.Assignment.accept(Assignment.java:111)
Run Code Online (Sandbox Code Playgroud)

如何在不必findSingleBenchmark在我的ftl中多次调用该方法的情况下避免此异常?

Dav*_*ton 10

像这样处理不安全API的正常方法是使用!(bang)运算符:

<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)!>
Run Code Online (Sandbox Code Playgroud)

这在详细FreeMarker的文档的这一部分推理在这里给出.


如果您的代码段是实际代码,则可以将其(显着)缩短为:

<td>${singleBenchmark.score!""}</td>
Run Code Online (Sandbox Code Playgroud)