Как установить атрибут для объекта в Groovy - PullRequest
0 голосов
/ 07 сентября 2018

Я хотел бы написать эквивалент этого кода Python в Groovy:

>>> 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 голосов
/ 07 сентября 2018
class TmpClass {}
def tmp = new TmpClass()
tmp.metaClass.name = "value"
0 голосов
/ 07 сентября 2018

Если вы просто ищете способ установить динамические свойства, тогда достаточно квадратных скобок:

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

Но если вам также нужно динамически увеличивать объект с помощью новых полей и т. Д., И вы не хотите использовать простую карту, то вам, вероятно, следует использовать Expando (вместо класса) , который поддерживает добавление динамических свойств и замыканий:

def tmp = new Expando()
tmp['name'] = 'value'
tmp[propertyName] = propertyValue //runtime values
0 голосов
/ 07 сентября 2018

Вы можете сделать что-то вроде этого:

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 для установки и получения атрибута.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...