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

时间:2012-07-22 18:23:00

标签: java freemarker

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

<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)>

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

<#if !singleBenchmark??>
    <td></td>
<#else>
    <td>${singleBenchmark.score}</td>
</#if>

如果该Java方法返回<#assign ...> ,它仍会在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)

如何在我的ftl中多次调用findSingleBenchmark方法来避免此异常?

1 个答案:

答案 0 :(得分:10)

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

<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)!>

详情请见this section of the FreeMarker docsthe reasoning is given here


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

<td>${singleBenchmark.score!""}</td>