黑马程序员技术交流社区

标题: 一段代码求解释 [打印本页]

作者: 闫玉泉    时间: 2012-2-28 20:31
标题: 一段代码求解释
本帖最后由 闫玉泉 于 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("修改失败");
                }
        }
作者: 石德志    时间: 2012-2-28 20:49
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这个成员对象表示的成员变量为可访问的.
作者: H07000223    时间: 2012-2-28 22:24
setAccessible()基本上就两种使用形式:
1.(私有)属性.setAccessible(true):作用就是让你能够调用这个类中的私有属性
2.(私有)方法.setAccessible(true):作用就是让你能够调用这个类中的私有方法

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

除非必要,不推荐使用。



作者: 雷楚光    时间: 2012-2-29 09:38
f.setAccessible(true);把私有属性和私有方法设置成可见。使你可以直接调用私有属性和私有方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2