黑马程序员技术交流社区

标题: 成员变量反射设置值的问题 [打印本页]

作者: 马林康    时间: 2012-6-20 10:44
标题: 成员变量反射设置值的问题
本帖最后由 马林康 于 2012-6-20 12:23 编辑

反射主类代码
  1.   Student s =new Student(12,"zhangsan");
  2.                 Field[] fields=s.getClass().getFields();
  3.                 for(Field field :fields){
  4.                         if(field.getType()==String.class){
  5.                         String oldValue =(String) field.get(s);
  6.                         String newValue=oldValue.replace('b' ,'a');
  7.                         field.set(oldValue, newValue);
  8.                         }               
  9.                 }
  10.                 System.out.println(s);
复制代码
Student类
  1. public class Student {
  2.         private int age;
  3.         private String name;
  4.         String str1="ball";
  5.         String str2="basketball";
  6.         String str3="good";
  7.         ...省略部分代码
  8.         public String toString(){
  9.                 return str1+":"+str2+":"+str3;
  10.         }

  11. }
复制代码
运行之后输出仍然是原值,没有替换 ,然后我对照了一下视频 ,把字符串用public 修饰 ,结果报错  求助……

作者: 闾丘日月    时间: 2012-6-20 11:10
楼主set方法参数写错了。
set(obj,value)第一个参数应该是Student对象的一个实例,将它改为field.set(s,newValue)
作者: 李天甲    时间: 2012-6-20 11:24
  1.         public static void main(String[] args) throws Exception {
  2.                   Student s =new Student(12,"zhangsan");                  
  3.           Field[] fields=s.getClass().getDeclaredFields();
  4.           System.out.println(fields.length);  
  5.           for(Field field :fields){
  6.                           System.out.println(field.getType());
  7.                   if(field.getType()==String.class){
  8.                           field.setAccessible(true);
  9.                           String oldValue =(String) field.get(s);
  10.                           System.out.println(oldValue);
  11.                           String newValue=oldValue.replace('b' ,'a');
  12.                           //field.set(oldValue, newValue);//这个写错了呵呵
  13.                           field.set(s,newValue);//传入对象,传入新值
  14.                   }               
  15.           }
  16.           System.out.println(s);
复制代码
呵呵,刚才调试来着,你set方法错了,楼上正解





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