Używanie Groovy 1.8. Próbuję utworzyć dynamiczną definicję klasy, która będzie właściwości pamięci podręcznej dla każdego obiektu. Użyłem propertyMissing
bez dodawania właściwości obiektu do porządku. Po prostu myślę, że buforowanie właściwości byłoby bardziej efektywne. Dobrze?Dynamiczna właściwość Groovy na obiekt
Należy pamiętać, że każda instancja musi mieć swoje własne właściwości.
Poniższy kod działa poprawnie:
class C {}
def c = new C()
c.metaClass.prop = "a C property"
println c.prop
def x = new C()
x.prop
wyjście wola:
a C property
groovy.lang.MissingPropertyException: No such property: prop for class: C
Jeśli muszę to problemowo:
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
Dla A
, mam w miarę " utwórz nową właściwość ", ale linia this.metaClass."$name" = "Dyna prop $name"
kończy się niepowodzeniem z: No such property: p1 for class at line 5
Co jest nie tak?
Aha .. Możesz to zrobić tylko w czasie kompilacji .. szkoda. – Ayman
Możesz użyć komponentu Runtime dla runtime – Manny
Naprawianie uszkodzonego linku "blogpost": http: // blog.enfranchisedmind.com/2008/06/groovy-metaclass-bug/ –