Динамическое свойство Groovy для каждого объекта

Использование 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 " не работает с: Нет такого свойства: p1 для класса в строке 5

Что не так?

5
задан Ayman 4 July 2011 в 07:15
поделиться