Java:如何通过存储在变量中的名称访问类的字段?
如何在名称为动态并存储在字符串变量中的类中设置或获取字段?
public class Test {
public String a1;
public String a2;
public Test(String key) {
this.key = 'found'; <--- error
}
}
如何在名称为动态并存储在字符串变量中的类中设置或获取字段?
public class Test {
public String a1;
public String a2;
public Test(String key) {
this.key = 'found'; <--- error
}
}
你必须使用反射:
Class.getField()
获取字段
引用。如果不是公开的,则需要改为调用 Class.getDeclaredField()
AccessibleObject.setAccessible
获取对字段(如果该字段不是公共字段)的访问权限Field.set()
设置值,或者使用名称类似的方法之一(如果它是基元)下面是一个处理公共字段的简单情况的示例。如果可能的话,更好的替代方法是使用属性。
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);
}
}
Class<?> actualClass=actual.getClass();
Field f=actualClass.getDeclaredField("name");
上面的代码就足够了。
object.class.getField("foo");
不幸的是,上面的代码对我不起作用,因为该类有空的字段数组。