在查看Java文档here,阅读Oracle tutorial以及访问this question here on SO之后,我仍然对Object
Field#get(Object obj)
中的Field field = SomeClass.getClass().getDeclaredField("someField");
field.setAccessible(true);
参数感到茫然{1}}实际上是。
我使用Reflection获取字段的过程是:
Field
给出了Field#get(Object obj)
对象。现在,要获取字段的实际值,您将使用System.Nullable`1<!0> etc ...
方法。该方法的文档说明了有关参数的内容。
obj - 从中提取所表示字段值的对象
我不知道参数的描述甚至意味着什么。有人可以向我解释这个论点真正要求的是什么吗?
感谢。
答案 0 :(得分:5)
假设您有一个班级Foo
:
public class Foo {
public int bar;
}
现在您可以拥有此类的多个实例:
Foo f1 = new Foo();
f1.bar = 1;
Foo f2 = new Foo();
f2.bar = 2;
要反复获取bar
字段f1
的值,请致电
field.get(f1); // returns 1
要反复获取bar
字段f2
的值,请致电
field.get(f2); // returns 2
答案 1 :(得分:0)
尝试运行此代码:
import java.lang.reflect.Field;
public class TestReflect
{
private int value;
public static void main ( String[] args) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException
{
Field field = TestReflect.class.getDeclaredField("value");
TestReflect objRed = new TestReflect();
TestReflect objBlue = new TestReflect();
objRed.value = 1;
objBlue.value = 2;
System.out.println( field.get(objRed) );
System.out.println( field.get(objBlue) );
}
}
您将获得输出:
1
2
field
变量引用了类value
中的变量TestReflect
。但value
是instance variable,因此班级TestReflect
的每个对象都有自己的value
变量。要获取value
变量,您需要指定从哪个对象获取它,这就是参数的用途。