通过查看代码(实际上是测试代码),我感到很困惑:
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"))
我收到了错误!那么幕后会发生什么?对于哪些场景我必须使用对象名称和哪些场景类名?为什么?
先谢谢。
答案 0 :(得分:3)
get()
是User
类的静态方法,因为它与单个实例无关 - 它返回一个实例。所以你通常在类上调用它,但你也可以在实例上调用静态方法。如果你在Java中这样做,你的IDE会警告你它会工作,但不应该这样做,但我怀疑任何IDE都为Groovy做了这个(还)。
addToPosts()
是一个实例方法,因为必须在实例上调用它才能将Post
添加到User实例的posts
集合中。你无法在课堂上调用它,因为这没有意义 - 该课程没有要添加的posts
集合。