2015-02-23 61 views
0

我一直想在我的POGO定义这样一个自定义的putAt方法来利用operator overloading in Groovy为什么重写putAt导致MissingPropertyException?

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的事做的问题。任何人都可以启发我吗?

回答

3

签名应该是

def putAt(String key, value) 
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