将Integer转换为Long in Velocity

时间:2013-10-16 12:51:00

标签: java velocity

它会将相关的类打印为java.lang.Longjava.lang.String,但不会转换。 请帮助解决这个问题。

还有其他一些简单的方法吗?

在Java文件中设置

resolver.setAttirbutes("Long",Long.class);
resolver.setAttirbutes("String",String.class);

转换为VM文件

$Long.parseLong($String.valueOf(2))

1 个答案:

答案 0 :(得分:5)

这不是静态方法的工作原理。 Java中是否存在Long.class.parseLong?不。你没有给Long添加静态引用,你正在放置处理反射和类加载的类对象。出于安全原因,Velocity甚至不允许您调用除Class之外的getName对象的任何方法。您希望将引用传递给Long本身,而不是Long.class,但不幸的是,这是不可能的。

但是,由于静态方法也可以在该类的任何实例上调用,所以您只需要在上下文中放置Long对象,例如Long.MAX_VALUELong.valueOf(0)。< / p>

即便如此,由于Velocity只能存储对象而不是原始值,因此任何long实际上都是Long,而任何int实际上都是Integer ,所以你可以这样做:

#set ($two = 2)
$two.class -> java.lang.Integer

#set ($twoLong = $two.longValue())
$twoLong.class -> java.lang.Long

#set ($threeLong = $twoLong.valueOf('3'))