什么应该传递给这个方法(Field#get(Object obj))?

时间:2015-07-22 09:59:14

标签: java oracle reflection field

在查看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 - 从中​​提取所表示字段值的对象

我不知道参数的描述甚至意味着什么。有人可以向我解释这个论点真正要求的是什么吗?

感谢。

2 个答案:

答案 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。但valueinstance variable,因此班级TestReflect的每个对象都有自己的value变量。要获取value变量,您需要指定从哪个对象获取它,这就是参数的用途。