2015-02-23 64 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