Использование 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
Что не так?