为什么重写 putAt 会导致 MissingPropertyException?

Why does overriding putAt result in MissingPropertyException?

我一直在尝试通过在我的 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)

我的 class 是 Grails 应用程序的一部分,所以我不确定 Grails 是否与该问题有关。任何人都可以启发我吗?

不是执行 putAt 然后覆盖运算符,而是通过添加 propertyMissing 方法的 easy/better 方法。 这里是 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

签名应该是

def putAt(String key, value)