¿Cuándo y dónde usar la instancia de objeto y el nombre de la clase en Grails?

Me ha confundido al ver el código (en realidad, un código de prueba):

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

En el código anterior, he creado un objeto para User clase y nombrado como user. Si reemplazo la línea:

def foundUser = User.get(user.id)

A algo como esto,

def foundUser = user.get(user.id)

Es decir, he cambiado de nombre de clase User a user nombre del objeto. Y cuando ejecuto la prueba, no me arroja ningún error.

Pero cuando cambio esta línea a:

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

A algo como

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

¡Recibo un error! Entonces, ¿qué sucede detrás de escena? ¿Para qué escenarios tengo que usar el nombre del objeto y para qué escenario el nombre de la clase? ¿Y por qué?

Gracias de antemano.

preguntado el 27 de agosto de 11 a las 14:08

1 Respuestas

get() es un método estático en el User class ya que no tiene nada que ver con una instancia individual, devuelve una instancia. Por lo tanto, normalmente lo llama en la clase, pero también puede llamar a métodos estáticos en instancias. Si hace esto en Java, su IDE le advertirá que funcionará pero que no debería hacerse, pero dudo que algún IDE haga esto para Groovy (todavía).

addToPosts() es un método de instancia, ya que se debe llamar en una instancia para agregar un Post a una instancia de usuario posts colección. No puede llamar a la clase, ya que eso no tiene sentido, la clase no tiene un posts colección para agregar.

Respondido 27 ago 11, 18:08

Como dijiste "[..] para agregar un Post a una instancia de usuario posts recopilación ". Quiere decir que los datos se incluirán en el Post mesa, a través de un User?. Esto sucede debido a la relación entre User y Post(como hice) - Hormiga

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.