1

它将相关类打印为java.lang.Longorjava.lang.String但它没有转换。请帮助解决这个问题。

有没有其他简单的方法可以做到这一点。?

在 Java 文件中设置

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

在VM文件中转换

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

1 回答 1

5

这不是静态方法的工作方式。Long.class.parseLongJava中存在吗?不,您不是在放置对 的静态引用Long,而是在放置处理反射和类加载的类对象。出于安全原因,Velocity 甚至不允许您调用ClassgetName. 您想传递对Long自身的引用, not Long.class,但不幸的是,这是不可能的。

但是由于静态方法也可以在该类的任何实例上调用,所以您只需将Long对象放入上下文中,例如Long.MAX_VALUEor Long.valueOf(0)

甚至不是这样,因为 Velocity 只能存储对象,而不是原始值,所以 anylong实际上是 a Long,而 anyint实际上是a Integer,所以你可以这样做:

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

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

#set ($threeLong = $twoLong.valueOf('3'))
于 2013-10-16T14:02:52.267 回答