什么时候在Grails中使用对象实例和类名?

时间:2011-08-27 14:02:18

标签: grails groovy

通过查看代码(实际上是测试代码),我感到很困惑:

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"))

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

先谢谢。

1 个答案:

答案 0 :(得分:3)

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

addToPosts()是一个实例方法,因为必须在实例上调用它才能将Post添加到User实例的posts集合中。你无法在课堂上调用它,因为这没有意义 - 该课程没有要添加的posts集合。