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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨朔 于 2012-7-4 19:50 编辑

两个程序第一个
public class TheOne {

        private String s1="ball";
        public String s2="bastball";
        
        TheOne(){
               
        }

}
第二个

import java.lang.reflect.Field;


public class Two {

        
        public static void main(String[] args) throws Exception {
                TheOne to=new TheOne();
                change(to);
                System.out.println(to);
               
        }
        public static void change(Object obj) throws Exception{
               
                Field[] field = obj.getClass().getDeclaredFields();
                for(Field fi:field){
                        
                        if(fi.getType()==String.class){
                                String s1=(String) fi.get(obj);
                                System.out.println("s1");
                        }
                }
               
        }

}
一直提示java.lang.IllegalAccessException: Class Two can not access a member of class TheOne with modifiers "private"这是为什么

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

3 个回复

正序浏览
这也是反射的一种应用,其实没多大用处 只是帮你了解反射,张老师讲过,这就好像 你和另外一个人,然后呢 另外一个人的私有的钱你是看不到的,但是你用了getDeclaredFields方法那么这就好比说 他穿了一件透明的裤子,咦你说这里面有钱,你看到了,但是呢 你就是不能去取,这人也太坏了是吧,故意给你显摆说我有钱你就是拿不到,但是你有办法啊,什么办法 setAcces的值设为true啊 这不就能获取到了  是吧 ,都有方法的兄弟
回复 使用道具 举报
本帖最后由 薄炳鑫 于 2012-7-2 22:07 编辑

你这就是想要用暴力反射。
对私有字段的反射,但是你少加了一句话fi.setAccessible(true);在for循环里面加上这句话就可以了。
将此对象的 accessible 标志设置为指示的布尔值。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1 张老师的“暴力反射" 哈哈

查看全部评分

回复 使用道具 举报
私有成员,在别的类里无法调用,只在本类可以访问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马