Groovy: свойства на лету - PullRequest
       19

Groovy: свойства на лету

0 голосов
/ 19 июля 2011

В Javascript вы можете определить объект со свойствами a и b следующим образом:

myObj={a:'a',b:'b'}

и затем вы можете добавить свойство c, например,

myObj.c = 'c'

Что эквивалентно этому в Groovy? Должен ли я использовать метакласс?

Вариант использования: преобразователи JSON в Grails не добавляют временные свойства к ответу, я хотел бы просто прикрепить случайное свойство к каждому элементу моего списка объектов.

Ответы [ 2 ]

3 голосов
/ 19 июля 2011

Цитирование из Использование метода Missing и propertyMissing :

Groovy также поддерживает propertyMissing для работы с попытками разрешения свойства. Для получения вы используете определение propertyMissing, которое принимает аргумент String:

  class Foo {
       def propertyMissing(String name) { name }
    }
    def f = new Foo()

    assertEquals "boo", f.boo

Для сеттеров вы добавляете второе определение propertyMissing, которое принимает аргумент значения:

class Foo {
   def storage = [:]
   def propertyMissing(String name, value) { storage[name] = value }
   def propertyMissing(String name) { storage[name] }
}
def f = new Foo()
f.foo = "bar"

assertEquals "bar", f.foo

Как и в methodMissing, вы, вероятно, захотите динамически зарегистрировать новые свойства во время выполнения, чтобы повысить производительность вашего кода.

3 голосов
/ 19 июля 2011

Вы можете использовать Map, который имеет похожий синтаксис и поведение:

def myObj [a:'a', b:'b']
myObj.c = 'c'

Вы также можете прикрепить поведение с помощью Closures, например,

myObj.sayHello = { -> println 'Hi' }

, а затем вызвать его какметод:

myObj.sayHello()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...