如何从可能返回null的方法分配变量?
问题描述:
我有以下代码,将Java方法的结果分配给一个freemarker变量。如何从可能返回null的方法分配变量?
<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)>
问题是该Java方法的返回值可能是null
。而且即使我检查,如果该变量不null
:
<#if !singleBenchmark??>
<td></td>
<#else>
<td>${singleBenchmark.score}</td>
</#if>
它仍然在<#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)
我怎样才能避免这种异常,而不必在我的ftl中多次调用findSingleBenchmark
方法?
答
正常的方式来处理不安全的API,如这与!
(爆炸)操作:
<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)!>
这是this section of the FreeMarker docs和the reasoning is given here详细。
如果你的代码段是实际的代码,你可能会缩短它(显著)到:
<td>${singleBenchmark.score!""}</td>