使用Groovy 1.8。我試圖創建一個動態類定義,將緩存每個對象的屬性。我沒有使用propertyMissing
而沒有將屬性添加到對象就好了。我只是認爲緩存這些屬性會更有效率。對?Groovy每個對象的動態屬性
請注意,每個實例必須具有其自己的不同屬性。
下面的代碼工作正常:
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
怎麼了?
啊哈..你只能在編譯時做這個..太糟糕了。 – Ayman
您可以使用運行時mixin運行時 – Manny
修復「blogpost」斷開的鏈接:http:// blog。enfranchisedmind.com/2008/06/groovy-metaclass-bug/ –