Можно ли переопределить методы доступа List в классах домена Grails? - PullRequest
1 голос
/ 25 марта 2010

Если у меня есть список в доменном классе Grails, есть ли способ переопределить методы доступа addX () и removeX () к нему?

В следующем примере я ожидаю, что MyObject.addThing (String) будет вызван дважды. На самом деле вывод:

Добавление вещи: вещь 2

class MyObject {
    static hasMany = [things: String]
    List things = []

    void addThing(String newThing) {
        println "Adding thing: ${newThing}"
        things << newThing
    }
}

class BootStrap {
    def init = { servletContext ->
            MyObject o = new MyObject().save()
            o.things << 'thing 1'
            o.addThing('thing 2')
        }
        def destroy = {
    }
}

Ответы [ 3 ]

2 голосов
/ 25 марта 2010

Метод должен называться leftShift (String), а не addThing (), как описано в перегрузке оператора Groovy page .

1 голос
/ 22 августа 2010

Перемещение моего комментария к ответу:

Попробуйте использовать встроенные addToThings, как описано здесь:

http://www.grails.org/doc/latest/ref/Domain%20Classes/addTo.html

0 голосов
/ 25 марта 2010

Я не понимаю, почему вы ожидаете, что addThing() будет вызван дважды? Вот объяснение вашего кода

// things is a List, so this calls List.leftShift(Object) 
o.things << 'thing 1'

// o is an instance of MyObject, so this calls addThing()
o.addThing('thing 2')

То есть вы звоните addThing() только один раз.

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