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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 821728010 中级黑马   /  2013-6-5 20:22  /  1023 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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";        
}        
        

3 个回复

倒序浏览
你设置的是对象的值
回复 使用道具 举报
属性上的值还没有设置过来。
回复 使用道具 举报
本帖最后由 桉树 于 2013-6-5 23:12 编辑

因为 A 类中的 str1 和 str2 属性是 protected 的,则在一般情况下是不能被反射的,即你的Field[] 数组是空的。
所以只要将A类中的 str1 和 str2 设置为 public 就可以了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马