黑马程序员技术交流社区

标题: 反射的问题 [打印本页]

作者: 821728010    时间: 2013-6-5 20:22
标题: 反射的问题
本帖最后由 821728010 于 2013-6-7 19:47 编辑

我想通过反射改变一个类中所有String类型字段的值,这段代码却不成功,哪里有问题?


import java.lang.reflect.*;

public class FsFiled {
        public static void main(String[] args)throws Exception{
               
                A a = new A();
                Field[] f = a.getClass().getFields();
               
                for(Field ff : f ){
                        if(ff.getType() == String.class){
                                String os = (String)ff.get(a);
                                String ns =  os.replace('a','h');
                                ff.set(a,ns);
                                System.out.println("consturctor");
                        }
                }
                System.out.println(a.str1);
                System.out.println(a.str2);
                }
        }

class A{
        
        String str1 = "java";
        String str2 = "abcd";        
}        
        
作者: eycrckag    时间: 2013-6-5 20:34
你设置的是对象的值

作者: eycrckag    时间: 2013-6-5 20:34
属性上的值还没有设置过来。
作者: 桉树    时间: 2013-6-5 22:59
本帖最后由 桉树 于 2013-6-5 23:12 编辑

因为 A 类中的 str1 和 str2 属性是 protected 的,则在一般情况下是不能被反射的,即你的Field[] 数组是空的。
所以只要将A类中的 str1 和 str2 设置为 public 就可以了




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