如何在Groovy中为对象设置属性

时间:2018-09-07 10:45:14

标签: java python groovy

我想用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")

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

编辑:我已经更新了代码以反映以下事实:属性/属性名称不是文字。

3 个答案:

答案 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"