java中的映射Field,如果有个实例field里面只有一个非静态啊字段,用get()获得的时候,为什么要传参数?

如题所述

如果是静态变量,即类变量
需要field.get(这里传Class实例)
如果是对象变量
需要field.get(这里传对象)
这个参数是必须的,否则get无法确定你要从哪儿获取这个field的值

例子:

Field field = Integer.class.getDeclaredField("MAX_VALUE");//静态变量
System.out.println(field.get(Integer.class));//输出2147483647 即Integer.MAX_VALUE

Integer i = new Integer(100);
field = Integer.class.getDeclaredField("value");//非静态
field.setAccessible(true);
field.get(i);//这里必须用对象
System.out.println(field.get(i));//输出100追问

恩。你说的我明白了。可是我有几个疑问
1:如果是静态变量,get()方法就传一个null就可以了吧?
2:Field的对象实例是从某个Class类对象的getDeclaredField()方法获得的,就是说, 这个fidld实例只绑定字段,而不知道是哪个类实例的,对吧?

追答

1.不能传null,空对象的成员是不可能有值的,要么是类的,要么是对象的。如果是类的,需要传代表这个类的类对象,就是class Class。

2,对的,只知道是哪个类,不知道对象

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-30
因为有参数和没参数调用的java反射API都是同一个啊,没参数你给个null就行了
相似回答