为什么重写putAt导致MissingPropertyException?

时间:2015-02-23 16:38:49

标签: grails groovy

我一直试图通过在我的POGO中定义自定义putAt方法来利用operator overloading in Groovy,如下所示:

class Book {
    Map additionalInfo = [:]

    def putAt(key, value) {
        additionalInfo[key] = value
    }
}

这样我就可以做book['notes'] = 'I like this one.'之类的事情(让我们说这是有道理的)。但是,我一直在:

groovy.lang.MissingPropertyException: No such property: notes for class: Book
    at BookSpec.Set property using putAt(BookSpec.groovy:40)

我的课程是Grails应用程序的一部分,所以我不确定Grails是否与该问题有关。有谁可以启发我这个?

2 个答案:

答案 0 :(得分:3)

签名应为

def putAt(String key, value)

答案 1 :(得分:0)

通过添加putAt方法,可以轻松/更好地实现propertyMissing,然后覆盖运算符。 以下是link的更多解释。

class Foo {
   def storage = [:]
   def propertyMissing(String name, value) { storage[name] = value }
   def propertyMissing(String name) { storage[name] }
}
def f = new Foo()
f.foo = "bar"

assertEquals "bar", f.foo