我想在 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