我想用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")
但是它抛出异常,表明找不到该属性。
编辑:我已经更新了代码以反映以下事实:属性/属性名称不是文字。
答案 0 :(得分:1)
如果您只是在寻找一种设置动态属性的方法,那么方括号表示法就足够了:
tmp['name'] = 'value'
tmp[propertyName] = propertyValue //runtime property name and value
但是,如果您还需要使用新字段等来动态增长对象,并且不想使用简单的映射,则可能应该使用Expando(而不是类),支持添加动态属性和闭包:
def tmp = new Expando()
tmp['name'] = 'value'
tmp[propertyName] = propertyValue //runtime values
答案 1 :(得分:0)
您可以执行以下操作:
class Student {
private int StudentID;
private String StudentName;
void setStudentID(int pID) {
StudentID = pID;
}
void setStudentName(String pName) {
StudentName = pName;
}
int getStudentID() {
return this.StudentID;
}
String getStudentName() {
return this.StudentName;
}
static void main(String[] args) {
Student st = new Student();
st.setStudentID(1);
st.setStudentName("Joe");
println(st.getStudentID());
println(st.getStudentName());
}
}
您需要将name
作为类型String
的实例变量。另外,您需要声明setter和getter方法来设置和获取属性。
答案 2 :(得分:0)
class TmpClass {}
def tmp = new TmpClass()
tmp.metaClass.name = "value"