为什么重写 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)
我一直在尝试通过在我的 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)