A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闫玉泉 黑马帝   /  2012-2-28 20:31  /  1572 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 闫玉泉 于 2012-2-29 08:16 编辑

public void setProperty(Object obj, String propertyName, Object value){
                try {
                        Field f = obj.getClass().getDeclaredField(propertyName);
                        f.setAccessible(true); 这句代码有什么作用?求解释,我看了API还是没有搞明白。
                        f.set(obj,value);
                } catch (Exception e) {
                        System.out.println("修改失败");
                }
        }

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

3 个回复

倒序浏览
public void setProperty(Object obj, String propertyName, Object value){
                try {
                        Field f = obj.getClass().getDeclaredField(propertyName);
                       // f.setAccessible(true); 这句代码有什么作用?求解释,我看了API还是没有搞明白。
                        f.set(obj,value);
                } catch (Exception e) {
                        System.out.println("修改失败");
                }
        }

你把 f.setAccessible(true);这行代码注释起来运行下试试,如果报错的话(不一定报错),报错错误的意思是f这个成员对象,不可见是私有的,如果是可以访问的就不会报错,这种用法称为"暴力反射",就是用反射的方法访问对象中部可见的成员变量. f.setAccessible(true);这行代码的意思是设置f这个成员对象表示的成员变量为可访问的.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
setAccessible()基本上就两种使用形式:
1.(私有)属性.setAccessible(true):作用就是让你能够调用这个类中的私有属性
2.(私有)方法.setAccessible(true):作用就是让你能够调用这个类中的私有方法

总之就是让你绕过了权限的问题,获得对这些私有属性、方法使用的权利。

除非必要,不推荐使用。


评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
f.setAccessible(true);把私有属性和私有方法设置成可见。使你可以直接调用私有属性和私有方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马