2011-08-27 37 views
1

我已被混淆,通过观看代码(实际上是一个测试代码):何时何处使用Grails中的对象实例和类名?

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) 

即我从类名称User改为user对象名称。当我运行测试时,它不会给我带来任何错误。

但是,当我改变这一行:

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

喜欢的东西,

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

我得到一个错误!那么幕后发生了什么?对于哪些场景,我必须使用对象名称和哪些场景类名?为什么?

在此先感谢。

回答

3

get()User类中的静态方法,因为它与单个实例无关 - 它会返回一个实例。所以你通常在类上调用它,但是你也可以在实例上调用静态方法。如果你在Java中这样做,你的IDE会警告你它可以工作,但不应该完成,但是我怀疑任何IDE对Groovy都这么做。

addToPosts()是一个实例方法,因为它必须被要求的情况下,以一个Post添加到用户实例的posts集合。你不能在课堂上调用它,因为这没有任何意义 - 课程没有posts集合添加到。

+0

正如你所说的“[..]为用户实例的'posts'集合添加一个'Post'。你的意思是这些数据将通过“用户”输入到“Post”表中。发生这种情况是因为User和Post之间的关系(正如我所做的那样) –

相关问题