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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

实现:通过反射修改一个对象里面的所有String类型的成员,将变量值中的b修改成a

一、创建一个需要被反射的类,里面有多个已经有默认值String类型的成员变量
  1. public class Demo {
  2.        
  3.         public int x ;
  4.        
  5.         private int y ;
  6.        
  7.         public String str1 = "table";
  8.         public String str2 = "basketable";
  9.         public String str3 = "itast";

  10.         public int getX() {
  11.                 return x;
  12.         }

  13.         public void setX(int x) {
  14.                 this.x = x;
  15.         }

  16.         public int getY() {
  17.                 return y;
  18.         }

  19.         public void setY(int y) {
  20.                 this.y = y;
  21.         }

  22.         @Override
  23.         public String toString() {
  24.                 return "Demo [str1=" + str1 + ", str2=" + str2 + ", str3=" + str3 + "]";
  25.         }
  26.        
  27.        

  28. }
复制代码

二、编写测试方法,并实现其功能
  1. public  void changValue() throws Exception{
  2.                 Demo demo = new Demo();//初始化实例
  3.                
  4.                 //要求将 demo类中所有String 字段,值中所有的b替换成a
  5.                 Field[] fields = demo.getClass().getFields();
  6.                 for (Field field : fields) {
  7. //                        if(field.getType().equals(String.class)这种写法有问题两个字节码比较
  8.                         if(field.getType() == (String.class)){
  9.                                         String oldValue = (String)field.get(demo);
  10. //                                        值替换
  11.                                         String newValue = oldValue.replace("b", "a");
  12. //                                        将修改后的值设置回对象中去
  13.                                         field.set(demo, newValue);
  14.                                 }
  15.                         }
  16. //                打印输出结果
  17.                 System.out.println(demo);
  18.         }
复制代码




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马