使用 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
For A
,我得到了“创建新财产”,但是这条线this.metaClass."$name" = "Dyna prop $name"
失败并显示:No such property: p1 for class at line 5
怎么了?
这段代码应该做你想要的:
class A {
A() {
def mc = new ExpandoMetaClass( A, false, true)
mc.initialize()
this.metaClass = mc
}
def propertyMissing( String name ) {
println "create new propery $name"
def result = "Dyna prop $name"
this.metaClass."$name" = result
println "created new propery $name"
result
}
}
a = new A()
println a.p1
println a.p1
输出:
create new propery p1
created new propery p1
Dyna prop p1
Dyna prop p1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)