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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马林康 中级黑马   /  2012-6-20 10:44  /  2031 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马林康 于 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 修饰 ,结果报错  求助……

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
楼主set方法参数写错了。
set(obj,value)第一个参数应该是Student对象的一个实例,将它改为field.set(s,newValue)

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  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方法错了,楼上正解

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马