Java:如何通过存储在变量中的名称访问类的字段?

2022-09-01 10:41:02

如何在名称为动态并存储在字符串变量中的类中设置或获取字段?

public class Test {

    public String a1;
    public String a2;  

    public Test(String key) {
        this.key = 'found';  <--- error
    } 

}

答案 1

你必须使用反射:

下面是一个处理公共字段的简单情况的示例。如果可能的话,更好的替代方法是使用属性。

import java.lang.reflect.Field;

class DataObject
{
    // I don't like public fields; this is *solely*
    // to make it easier to demonstrate
    public String foo;
}

public class Test
{
    public static void main(String[] args)
        // Declaring that a method throws Exception is
        // likewise usually a bad idea; consider the
        // various failure cases carefully
        throws Exception
    {
        Field field = DataObject.class.getField("foo");
        DataObject o = new DataObject();
        field.set(o, "new value");
        System.out.println(o.foo);
    }
}

答案 2
Class<?> actualClass=actual.getClass();

Field f=actualClass.getDeclaredField("name");

上面的代码就足够了。

object.class.getField("foo");

不幸的是,上面的代码对我不起作用,因为该类有空的字段数组。