java中的映射Field,如果有个实例field里面只有一个非静态啊字段,用get()获得的时候,为什么要传参数?
2个回答
展开全部
如果是静态变量,即类变量
需要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
需要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。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询