关于赋值的问题
问题描述:
如果是property标签,底层就是使用反射机制调用setter方法进行赋值。我记得前面有个地方老师说过,有一种情况不是调用setter方法,而是直接通过反射获得属性,然后把属性的访问范围改成public,进行直接赋值,然后再把范围改回private。哪一种情况会这样赋值呢?
(谢谢老师)
9
收起
正在回答
1回答
同学你好,同学可以参考下方代码,使用到setAccessible方法打破封装,将原本的private修饰符通过反射修改为public。这个方法的参数如果是true,表示将权限修改为public,如果是false则表示修改为private。
package com.imooc.test; import java.lang.reflect.Field; public class Test { public static void main(String[] args) throws Exception { //获取类对象 Class<Teacher> c = Teacher.class; //获取私有属性 Field f = c.getDeclaredField("name"); //将访问权限进行修改 f.setAccessible(true); //获取属性的值 Object o = f.get(c.newInstance()); //输出属性 System.out.println(o); } } class Teacher{ private String name = "imooc"; }
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星