黑马程序员技术交流社区

标题: 反射中Field反射注意事项 [打印本页]

作者: 黑马十八期0513    时间: 2013-1-18 11:39
标题: 反射中Field反射注意事项
张孝祥老师视频中有一个用反射把任意一个类中的字符串成员字符a换成字符b的例子。我自己在写的时候出了一些问题,写出来让大家指教一下。
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
class Demo{
     public static void main(String[]args) throws Exception{
        Exercise e =new Exercise("agree","attack");  
  
       Trance(e);
       System.out.println("e="+e);
  
      Object obj =new Object();
  
     System.out.println(obj.getClass()==Class.forName("java.lang.Object"));
}
    public static void Trance(Object obj) throws Exception{
        Field []fields =obj.getClass().getDeclaredFields();   //获取包括隐藏的成员变量
        /*
        这里要用obj.getClass(),不能用Class.forName("java.lang.Object"),也不能用Objcet.class,
       否则就不能将传入参数的字符串成员变量的a改成b,而是把Object类中的字符串成员变量的a改成b
       获得Class类的方法有三种,但是这里只能用obj.getClass()这一种方法,因为此时的obj是参数对象,而不是变量。
       */
        System.out.println(obj.getClass()==Class.forName("java.lang.Object"));
      
        for(Field field:fields){
            field.setAccessible(true);    //设置访问权限
            if(field.getType()==String.class){
                String oldValue =(String)field.get(obj);
                String newValue =oldValue.replace('a','b');
                field.set(obj,newValue);
                        }
                }
        }
}

class Exercise{
public String s1="abc";
private String s2="access";
String s3="basket";
String s4="package";
String s5;
String s6;
int x;
int y;
public Exercise(String s5, String s6) {
  super();
  this.s5 = s5;
  this.s6 = s6;
}
public Exercise(int x,int y){
  this.x=x;
  this.y=y;
}
@Override
public String toString() {
  return "Exercise [s1=" + s1 + ", s2=" + s2 + ", s3=" + s3 + ", s4="
    + s4 + ", s5=" + s5 + ", s6=" + s6 + ", x="+x+", y="+y+"]";
}
}

作者: 惠晖    时间: 2013-1-18 11:48
或者你也可以     String s   
作者: yong230    时间: 2013-1-18 17:15
学习了....
作者: 朱玉玺    时间: 2013-1-20 14:00
本帖最后由 zyx67786110 于 2013-1-20 14:14 编辑

确实是这样。




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