2010-10-09 36 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