我正在IntelliJ中定义一个自定义的toString模板。IntelliJ提供了一个基于Velocity脚本语言的模板系统。很棒的东西!
但我现在面临着一个特殊的问题。我需要区分int
字段和double
字段。本质上生成类似(简化(的东西:
public String toString() {
String output = "";
output += "myIntField:" + Util.intDescription(myIntField);
output += "myDblField:" + Util.doubleDescription(myDblField);
return output;
}
对于Integer
类型,它可以很好地工作,但我似乎无法使它适用于基元int
。
#if ($member.typeQualifiedName == "java.lang.Integer")
...
#end
#if ($member.typeName == "Integer")
...
#end
我可以用$member.primitive
和$member.numeric
这样的方法来构造,但它们都不能区分double
和int
。
IntelliJ的文档给我的印象是我已经走到了死胡同。
PS:当然可以通过更改java代码/api来解决,这可以简化toString()
方法所需的格式。但这对我来说真的是最后的手段。
#elseif ( $member.type == 'double' )
output += "myDoubleField:" + Util.doubleDescription(myDoubleField);
#elseif ( $member.type == 'int' )
output += "myIntField:" + Util.intDescription(myIntField);
无论出于何种原因,$member.isDouble属性对我来说都不可访问。它没有列在IntelliJ的文档、VTL参考或VTL用户指南中,.type.也没有
我首先打印出$member,它列出了这个对象的所有属性。我不知道为什么它会被列为Double。