2010-10-09 58 views
1

我有一個名稱/值對的映射:Groovy:在設置屬性值容易

def myMap = [ 
    "username" : "myname", 
    "age" : 30, 
    "zipcode" : 10010 
] 

我已經定義了一個名爲User類:

class User { 
    def username; 
    def age; 
    def zipcode; 
} 

我想在調用適當的setter方法豆。有沒有一個很好的常規方式做到這一點?請注意,我可能會在myMap中添加一些不會設置的額外內容。 (該地圖是一個表單參數值地圖)

我在考慮使用invokeMethod,但我假設有一個更好的方法。

回答

3

我發現這一點:Groovy - bind properties from one object to another

而且我意識到我可以做到以下幾點:

def prunedMap = [:] 
myMap.each{ 
    if (User.metaClass.properties.find{p-> p.name == it.key}) { 
     prunedMap.put(it.key, it.value) 
    } 
} 

User user = new User(prunedMap) 
+2

你也可以這樣做:'新用戶(myMap.findAll {K,V - 在用戶>ķ。 metaClass.properties * .name})' – 2010-10-10 00:42:05