黑马程序员技术交流社区
标题:
为什么用getDeclaredField方法不能获得private对象
[打印本页]
作者:
杨朔
时间:
2012-7-2 21:32
标题:
为什么用getDeclaredField方法不能获得private对象
本帖最后由 杨朔 于 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"这是为什么
作者:
黑马-王言龙
时间:
2012-7-2 21:40
私有成员,在别的类里无法调用,只在本类可以访问
作者:
薄炳鑫
时间:
2012-7-2 21:54
本帖最后由 薄炳鑫 于 2012-7-2 22:07 编辑
你这就是想要用暴力反射。
对私有字段的反射,但是你少加了一句话fi.setAccessible(true);在for循环里面加上这句话就可以了。
将此对象的 accessible 标志设置为指示的布尔值。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。
作者:
周朋飞
时间:
2012-7-2 23:39
这也是反射的一种应用,其实没多大用处 只是帮你了解反射,张老师讲过,这就好像 你和另外一个人,然后呢 另外一个人的私有的钱你是看不到的,但是你用了getDeclaredFields方法那么这就好比说 他穿了一件透明的裤子,咦你说这里面有钱,你看到了,但是呢 你就是不能去取,这人也太坏了是吧,故意给你显摆说我有钱你就是拿不到,但是你有办法啊,什么办法 setAcces的值设为true啊 这不就能获取到了 是吧 ,都有方法的兄弟
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2