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