反射修改字段数据

来源:互联网 发布:linux pl2303驱动下载 编辑:程序博客网 时间:2024/05/20 03:05

/*

 *练习:获取一个对象的所有字段,把其中String类型的字段值中的’h’全改成’t’

 *分析:

 *前提条件:我们不知道这个对象有哪些成员变量,也不知道哪些成员变量是String类型。

 *我们只能通过反射来做。

 *首先要获取这个对象的字节码对象。然后反射获取这个对象的所有字段,判断这些字段是否是String类型

 *如果是,就把其中的h改成f

 * 解析

 * A:获取对象的Class对象

 * B:得到对象所属类的所有字段

 * C:循环遍历,拿到每个字段

 * D:判断是否是String类型

 *    否:不是需要的状态忽略

 *    是:E:取出字段的值

 *       F:把其中的h替换成t

 *       G:把修改好的字符串重新设置给原来的字段

 */

publicclass ReflectDemo04 {

    publicstatic void main(String[]args) throws Exception {

       Student s = new Student("tanshilin", 23,"henan");

       // A:获取对象的Class对象

       Class clazz = s.getClass();

       // B:获取对象所属类的所有字段

       Field[] fields = clazz.getDeclaredFields();

       // C:循环遍历,拿到每个字段

       for( Fieldf : fields){

           // 暴力访问

           f.setAccessible(true);

           // D:判断是否是String类型

           if(f.getType()== String.class){

              // 是:E:取出字段的值

              String str = (String) f.get(s);

              // F:把其中的h替换成t

              str = str.replace('h','t');

              // G:把修改好的字符串设置给这个字段

              f.set(s, str);

           }

       }

       System.out.println(s);

    }

}

原创粉丝点击