基於this question我創建了一個具有動態屬性的Groovy類。Groovy動態對象 - 如何正確重置屬性?
class MyDynamic {
def propertyMissing(String name, value) {
this.metaClass."$name" = value
value
}
}
到目前爲止都好,現在我可以設置與成功的一些不存在的財產
MyDynamic dyna = new MyDynamic()
dyna.someProp = new Date()
當我與財產同名的另一個實例我的問題開始,但與其他類型
MyDynamic dyna2 = new MyDynamic()
dyna2.someProp = "0" //GroovyCastException: Cannot cast object '0' with class 'java.lang.String' to class 'java.util.Date'
其實我需要這個,因爲我創建的對象與查詢的結果不知道表和列。我用ResultSetMetaData
獲得列的名稱,並將該屬性添加到動態對象的實例。稍後我將使用這個對象來導出所有的屬性和值。在不同的表中,我有相同的列名稱,但具有不同的類型。
所以我的問題是:當我完成與不與其他實例衝突的實例時,如何重置此metaClass?
這片段是不是工作 – Will 2013-04-03 22:00:51
對不起,類寫着「類」 – 2013-04-03 22:02:06
我固定的,但它仍然無法正常工作。你使用什麼版本? – Will 2013-04-03 22:02:53