Значение поля Java-объекта динамически (путем отражения) - PullRequest
8 голосов
/ 25 июня 2011

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

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

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

Ответы [ 3 ]

12 голосов
/ 25 июня 2011

Используйте метод 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
4 голосов
/ 25 июня 2011
Field f = Myclass.class.GetField("Str");
MyClass cl = new MyClass();
cl.Str = "Something";
String value = (String)f.get(cl); //value == "Something" 
0 голосов
/ 25 июня 2011

Должно идти так:

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

Запомни исключения.

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