Значение поля объекта Java динамически (по отражению)

Я получаю имена различных полей в таком классе:

Field[] f = MyClass.class.getDeclaredFields();
Sring str = f[0].toString();
MyClass cl = new MyClass();

Теперь я хочу получить доступ к (общественного) поля str с объектом cl динамически. Как мне это сделать?

3 ответов


использовать Field.get метод, подобный этому (для 0-го поля):

Object x = f[0].get(cl);

чтобы выяснить, какой индекс str поле имеет вы можете сделать

int strIndex = 0;
while (!f[strIndex].getName().equals("str"))
    strIndex++;

вот полный пример, иллюстрирующий это:

import java.lang.reflect.Field;

class MyClass {
    String f1;
    String str;
    String f2;
}

class Test {
    public static void main(String[] args) throws Exception {
        Field[] f = MyClass.class.getDeclaredFields();
        MyClass cl = new MyClass();
        cl.str = "hello world";

        int strIndex = 0;
        while (!f[strIndex].getName().equals("str"))
            strIndex++;

        System.out.println(f[strIndex].get(cl));

    }
}

выход:

hello world

Field f = Myclass.class.GetField("Str");
MyClass cl = new MyClass();
cl.Str = "Something";
String value = (String)f.get(cl); //value == "Something" 

должно быть так:

Field[] f = MyClass.class.getDeclaredFields();
MyClass targetObject = new MyClass();
...
Object fieldValue = f[interestingIndex].get(cl);

виду исключения.