Когда и где использовать экземпляр объекта и имя класса в Grails? - PullRequest
1 голос
/ 27 августа 2011

Я был сбит с толку, увидев код (на самом деле тестовый код):

def user = new User(userId:'anto',password:'xxxx')
        user.addToPosts(new Post(content:"First"))
        def foundUser = User.get(user.id)

В приведенном выше коде я создал объект для класса User и назвал его user. Если я заменю строку:

def foundUser = User.get(user.id)

На что-то подобное,

def foundUser = user.get(user.id)

I.e. Я изменил имя класса User на user имя объекта. И когда я запускаю тест, он не выдает мне никакой ошибки.

Но когда я изменю эту строку на:

user.addToPosts(new Post(content:"First"))

На что-то вроде

User.addToPosts(new Post(content:"First"))

Я получаю ошибку! Так что же происходит за кулисами? Для каких сценариев мне нужно использовать имя объекта, а для каких сценариев - имя класса? И почему?

Заранее спасибо.

1 Ответ

3 голосов
/ 27 августа 2011

get() - это статический метод класса User, поскольку он не имеет ничего общего с отдельным экземпляром - он возвращает экземпляр.Таким образом, вы обычно вызываете его в классе, но вы также можете вызывать статические методы в экземплярах.Если вы сделаете это в Java, ваша IDE предупредит вас, что это будет работать, но не должно быть сделано, но я сомневаюсь, что любая IDE делает это для Groovy (пока).должен быть вызван для экземпляра, чтобы добавить Post в коллекцию posts экземпляра пользователя.Вы не можете вызывать его в классе, так как это не имеет смысла - у класса нет коллекции posts, которую можно добавить.

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