动态Java对象的值(通过反射)

mih*_*the 8 java reflection

我在这样的类中得到各个字段的名称:

Field[] f = MyClass.class.getDeclaredFields();
Sring str = f[0].toString();
MyClass cl = new MyClass();
Run Code Online (Sandbox Code Playgroud)

现在我想动态地str从对象访问(公共)字段cl.我怎么做?

aio*_*obe 12

使用这样的Field.get方法(对于第0个字段):

Object x = f[0].get(cl);
Run Code Online (Sandbox Code Playgroud)

要确定该str字段可以使用哪个索引

int strIndex = 0;
while (!f[strIndex].getName().equals("str"))
    strIndex++;
Run Code Online (Sandbox Code Playgroud)

这是一个完整的例子来说明它:

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));

    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

hello world
Run Code Online (Sandbox Code Playgroud)

  • 更好的是,使用`MyClass.class.getDeclaredField("str")`. (2认同)