应该将什么传递给此方法 (Field#get(Object obj))?
What is supposed to be passed into this method (Field#get(Object obj))?
看了 Java 文档 here, and reading an Oracle tutorial, as well as visiting this question here on SO 之后,我仍然对 Field#get(Object obj)
中的 Object
参数实际上是什么感到傻眼。
我使用反射获取字段的过程是:
Field field = SomeClass.getClass().getDeclaredField("someField");
field.setAccessible(true);
它给出了 Field
对象。现在,要获取字段的实际值,您可以使用 Field#get(Object obj)
方法。此方法的文档说明了有关参数的以下信息。
obj - object from which the represented field's value is to be extracted
我什至不知道参数的描述是什么意思。有人可以向我解释一下这个论点真正要求的是什么吗?
谢谢。
假设你有一个 class Foo
:
public class Foo {
public int bar;
}
现在您可以拥有多个实例 class:
Foo f1 = new Foo();
f1.bar = 1;
Foo f2 = new Foo();
f2.bar = 2;
要反射性地获取 f1
的字段 bar
的值,您可以调用
field.get(f1); // returns 1
要反射性地获取 f2
的字段 bar
的值,您可以调用
field.get(f2); // returns 2
试试 运行 这个代码:
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
变量引用 class TestReflect
中的变量 value
。但是 value
是一个 instance variable 所以 class TestReflect
的每个对象都有自己的 value
变量。要获取 value
变量,您需要指定从哪个对象获取它,这就是参数的用途。
看了 Java 文档 here, and reading an Oracle tutorial, as well as visiting this question here on SO 之后,我仍然对 Field#get(Object obj)
中的 Object
参数实际上是什么感到傻眼。
我使用反射获取字段的过程是:
Field field = SomeClass.getClass().getDeclaredField("someField");
field.setAccessible(true);
它给出了 Field
对象。现在,要获取字段的实际值,您可以使用 Field#get(Object obj)
方法。此方法的文档说明了有关参数的以下信息。
obj - object from which the represented field's value is to be extracted
我什至不知道参数的描述是什么意思。有人可以向我解释一下这个论点真正要求的是什么吗?
谢谢。
假设你有一个 class Foo
:
public class Foo {
public int bar;
}
现在您可以拥有多个实例 class:
Foo f1 = new Foo();
f1.bar = 1;
Foo f2 = new Foo();
f2.bar = 2;
要反射性地获取 f1
的字段 bar
的值,您可以调用
field.get(f1); // returns 1
要反射性地获取 f2
的字段 bar
的值,您可以调用
field.get(f2); // returns 2
试试 运行 这个代码:
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
变量引用 class TestReflect
中的变量 value
。但是 value
是一个 instance variable 所以 class TestReflect
的每个对象都有自己的 value
变量。要获取 value
变量,您需要指定从哪个对象获取它,这就是参数的用途。