黑马程序员技术交流社区

标题: 反射实例细节求解 [打印本页]

作者: 彭颖    时间: 2013-3-26 16:49
标题: 反射实例细节求解
本帖最后由 彭颖 于 2013-3-27 21:52 编辑

private static void changeStringValue(Object obj)throws Exception {
                Field[] fields = obj.getClass().getFields();//得到所有字段
                for(Field field:fields){//给一个对象给我,然后扫描到所有成员变量,之后把值b改成a
                        if(field.getType()==String.class){//同一份字节码要用==
                        //field.getType()/*field是一个字段,是有类型的,所以.getType()*/.equals(String.class)
                        String oldValue = (String)field.get(obj);//在对象身上取值,(String)我们知道他是String类型
                        String newValue = oldValue.replace('b', 'a');//替换
                        field.set(obj, newValue);
                        
                        }
--------------------------------------------------------------
对于红色勾勒的语句,String.class是取得String类的字节码,为什么说和取得的所有字段类型(getType)是同一字节码,从而作比较,不是很理解,求指点。
作者: itserious    时间: 2013-3-26 18:37
    Field[] fields = obj.getClass().getFields();//得到所有字段
                for(Field field:fields){//给一个对象给我,然后扫描到所有成员变量,之后把值b改成a
                        if(field.getType()==String.class){//同一份字节码要用==

你这里是在遍历Field[], 再用if()来判断,该对象中的那些字段的类型。
如果是String.class,你才会替换这个字段的值中的字母。并没有说,取得的所有字段类型是同一字节码
filed.getType,是指当前字段,你当前遍历的某一个字段而已。




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