【发布时间】:2011-09-27 22:40:33
【问题描述】:
使用 Groovy 1.8。我正在尝试创建一个动态类定义,它将缓存每个对象的属性。我确实使用了propertyMissing,而没有将属性添加到对象中就好了。我只是认为缓存属性会更有效。对吧?
请注意,每个实例必须有自己不同的属性。
下面的代码可以正常工作:
class C {}
def c = new C()
c.metaClass.prop = "a C property"
println c.prop
def x = new C()
x.prop
将输出:
a C property
groovy.lang.MissingPropertyException: No such property: prop for class: C
如果我需要这样做有问题:
class A {
def propertyMissing(String name) {
if(!this.hasProperty(name)) {
println "create new propery $name"
this.metaClass."$name" = "Dyna prop $name"
println "created new propery $name"
}
this.metaClass."$name"
}
}
a = new A()
println a.p1
对于A,我得到了“创建新属性”,但this.metaClass."$name" = "Dyna prop $name" 行失败:No such property: p1 for class at line 5
怎么了?
【问题讨论】:
标签: dynamic groovy properties metaprogramming