黑马程序员技术交流社区

标题: 成员变量反射的几个疑问 [打印本页]

作者: 陈嘉宾    时间: 2012-6-17 20:00
标题: 成员变量反射的几个疑问
本帖最后由 陈嘉宾 于 2012-6-17 20:22 编辑

private static void changeStringValue(Object obj)这里为什么不能直接放String呢?还有if(field.getType()==String.class)这句话是什么意思主要是getType没明白什么意思





public class ReflectPoint {
public String str1="ball";
public String str2="basketball";
public String str3="itcast";
           @Override
         public String toString(){
                 return str1+":"+str2+":"+str3;
         }
}


public static void main(String[] args) throws Exception{
changeStringValue(pt1);
                System.out.println(pt1);
}

private static void changeStringValue(Object obj) throws Exception{
                Field[] fileds=obj.getClass().getFields();
                for(Field field:fileds){
                        //if(field.getType().equals(String.class)){;
                        if(field.getType()==String.class){
                                String oldValue =(String)field.get(obj);
                                String newValue=oldValue.replace('b','a');
                                field.set(obj, newValue);
                        }
                        
                }
               
        }

}
作者: 伊文龙    时间: 2012-6-17 20:16
首先,你的代码有问题,pt1是干嘛的。应该是在main方法中实例化的一个ReflectPoint 类的一个对象吧。
private static void changeStringValue(Object obj)
方法参数Object表示可以接收任意对象。怎么可能是String呢???!!!这个方法是修改对象属性中类型为String类型的值。楼主对代码不理解啊~~~
Field类的getType方法。其实你自己查阅帮助文档上面写的清清楚楚啊。返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型。
作者: 陈嘉宾    时间: 2012-6-17 20:23
伊文龙 发表于 2012-6-17 20:16
首先,你的代码有问题,pt1是干嘛的。应该是在main方法中实例化的一个ReflectPoint 类的一个对象吧。
priva ...

呵呵谢谢,越看越迷糊,很多地方都是不理解真实的意思,看来还是有很不不足啊:'(




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