反射操作私有属性时未关闭权限安全检测时报错
报错如下:
Exception in thread "main" java.lang.IllegalAccessException: Class reflection.Demo8 can not access a member of class reflection.User with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:296)
at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:288)
at java.lang.reflect.Field.set(Field.java:761)
at reflection.Demo8.main(Demo8.java:68)
我们先来分析一下造成这种报错的原因:
我们从获得的信息可知 Class reflection.Demo8 can not access a member of class reflection.User with modifiers “private”。
无法访问类反射的成员是因为User实体类带有修饰词“private”,也就是私有属性。
那么我们该怎么解决呢?
解决办法
反射不能直接操作私有属性 ,我们需要关闭程序的权限安全检测机制
使用属性或方法的setAccessible(true),成功解决
这里解释一下 setAccessible的作用:是启动或禁止安全访问检测的开关
开启时的好处:
- 提高反射的效率,频繁调用一段代码时建议开启
- 可以访问私有成员
年年岁岁花相似,岁岁年年人不同。
祝每一位奋斗的程序员身体健康,赚大钱,加油!加油!