我想在 Groovy 中编写与此 Python 代码等效的代码:

>>> class A(object): pass  
>>> a = A() 
>>> name = os.name 
>>> setattr(a, name, "some text") 
>>> a 
<__main__.A object at 0x10aad6a10> 
>>> a.posix 
'value' 

我尝试过这个:

class TmpClass {} 
def tmp = new TmpClass() 
String name = getNameFromSomeWhere() 
tmp.metaClass.setAttribute(tmp, name, "value") 

但它抛出异常,表示找不到该属性。

编辑:我已更新代码以反射(reflect)属性/属性名称不是文字的事实。

请您参考如下方法:

如果您只是在寻找一种设置动态属性的方法,那么方括号表示法应该足够了:

tmp['name'] = 'value' 
tmp[propertyName] = propertyValue //runtime property name and value 

但是,如果您还需要使用新字段等动态增长对象,并且不想使用简单的映射,那么您可能应该使用 Expando (而不是类),它支持添加动态属性和闭包:

def tmp = new Expando() 
tmp['name'] = 'value' 
tmp[propertyName] = propertyValue //runtime values 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!