在我的 Java 应用程序中,我使用了一种面向对象的解释脚本语言(使用 ANTLR 指定),并希望将其与 Velocity 一起使用。
我的语言中的对象由 DataObject 的实例表示,如下所示(简化):
public class DataObject {
protected Map<String, Object> properties;
public Map<String, DataEntity> getProperties() {
return properties;
}
public Object getProperty(String name) {
return properties.get(name);
}
}
并且对象实例 $foo 的属性可以作为 $foo.bar 访问
现在假设我已将 $foo 放入 VelocityContext:
DataObject foo = new DataObject();
velocityContext.put("foo", foo);
据我所知,我可以通过以下任何方式快速访问属性(位于 DataObject.properties 中):
<span>$foo.getProperties().get('bar')</span>
<span>$foo.getProperties()['bar']</span>
<span>$foo.getProperties().bar</span>
<span>$foo.properties.bar</span>
现在我的主要问题是:有没有办法改变行为,使得 $foo.bar 不会处理 Java 属性 dataObject.bar,而是直接处理 dataObject.properties.get("bar"),这样我就可以使用 $ Velociy 中的 foo.bar 就像我在自己的脚本语言中一样?