在 Freemarker 中将 BigDecimal 转换为 Short

Cast BigDecimal to Short in Freemarker

我的 freemarker 值堆栈中有一个 Map<Short, String>,我需要以这种方式在模板中打印一个值:

${map.get(3)}

由于 freemarker 将 3 解释为 BigDecimal,因此抛出异常:

freemarker.core._TemplateModelException:[...]
[...]
Caused by: java.lang.ClassCastException: java.lang.Short cannot be cast to java.math.BigDecimal
    at java.math.BigDecimal.compareTo(BigDecimal.java:220)
    at java.util.TreeMap.getEntry(TreeMap.java:352)
    at java.util.TreeMap.get(TreeMap.java:278)

当然我可以使字符串值在值堆栈中可访问,但是有没有更优雅的方法在 freemarker 中将数字转换为 Short

(我正在使用 freemarker 2.3.25

尝试

${map.get(new java.math.BigInteger("3").shortValueExact())}

OR

${map.get(new java.math.BigInteger("3").shortValue())}

尝试${map.get(3?short)}

这是调用未声明其参数类型的 API-s 的问题(例如 Map.get(Object);泛型类型参数在编译期间被删除)。