2010-03-25 40 views
1

如果我在Grails域類中有一個列表,是否有一種方法可以覆蓋它的addX()和removeX()訪問器?是否可以重寫Grails域類中的List訪問器?

在下面的例子中,我希望MyObject.addThing(String)被調用兩次。事實上,輸出爲:

添加件事:事2

class MyObject { 
    static hasMany = [things: String] 
    List things = [] 

    void addThing(String newThing) { 
     println "Adding thing: ${newThing}" 
     things << newThing 
    } 
} 

class BootStrap { 
    def init = { servletContext -> 
      MyObject o = new MyObject().save() 
      o.things << 'thing 1' 
      o.addThing('thing 2') 
     } 
     def destroy = { 
    } 
} 

回答

2

該方法應被調用leftShift(字符串),不addThing(),關於Groovy的操作符重載page如記錄。

+0

謝謝,好知道。不知道如何重寫'things'屬性的leftShift()方法。 – Armand 2010-03-25 16:35:28

+0

以Java的思維框架思考,您可以擴展List並在其中覆蓋它。它可能更動態地覆蓋leftShift()的內置List實現,但是隨後List實例的_all_會遵循這種行爲。擴展名單? – 2010-03-25 16:48:08

+0

也許我已經在想太多它是Java。我希望能完成例如addThing()方法中的驗證;創建一個內部存在約束條件的Thing類會更有趣嗎? – Armand 2010-03-25 17:10:15

0

我不明白你爲什麼期望addThing()被調用兩次?這是你的代碼的解釋

​​

所以,你只叫addThing()一次。

相關問題