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



我在这样的类中获得各种字段的名称:

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

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

像这样使用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);

注意例外情况。

相关内容

  • 没有找到相关文章