如何设置或获取名称为动态并存储在字符串变量中的类中的字段?Java:如何通过存储在变量中的名称访问类的字段?
public class Test {
public String a1;
public String a2;
public Test(String key) {
this.key = 'found'; <--- error
}
}
如何设置或获取名称为动态并存储在字符串变量中的类中的字段?Java:如何通过存储在变量中的名称访问类的字段?
public class Test {
public String a1;
public String a2;
public Test(String key) {
this.key = 'found'; <--- error
}
}
你必须使用反射:
Class.getField()
获得Field
参考。如果它不是公开你需要调用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);
}
}
set()问我两个参数,Object和value, 为什么不只是值?第一个参数是什么? - Field classField = this.getClass()。getField(objField.getName()); \t \t \t \t classField.set(Object,Value) – ufk 2010-01-24 13:39:56
感谢该示例清除了所有内容:) – ufk 2010-01-24 13:52:23
@ufk:第一个参数是要为其设置字段的对象。请注意,您通过查询类获得了Field实例 - 没有任何东西将其链接到该类的特定实例。 – 2010-01-24 13:53:54
Class<?> actualClass=actual.getClass();
Field f=actualClass.getDeclaredField("name");
上面的代码就足够了。
object.class.getField("foo");
不幸的是,上面的代码不适合我,因为类有空的字段数组。
虽然有这样做的正确理由,但如果您正在尝试这样做,您可能会做出非常错误的事情。 – 2010-01-24 16:24:06
你的代码示例很混乱。 – 2015-03-26 12:22:17