黑马程序员技术交流社区

标题: 成员变量反射,将String变量中的“a”替换为“b” [打印本页]

作者: 李深山    时间: 2012-3-17 14:36
标题: 成员变量反射,将String变量中的“a”替换为“b”
代码如下:
class ReflectPoint {
String str1 = "zhangxiaoxiang";
String str2 = "bixiangdong";
String str3 = "heima";
       
        public static void main(String[] args) {
               

        }
public String toString(){
        return "str1 :"+str1+" str2 :"+ str2 +" str3 :" +str3;
}
}




import java.lang.reflect.Field;

public class ReflectTest {
       
       
       
public static void main(String[] args) throws Exception{
        ReflectPoint rp=new ReflectPoint();
replaceTest(rp) ;       
System.out.println(rp);
       
}

private static void replaceTest(Object obj) throws Exception {
        // TODO Auto-generated method stub
     Field[] fields = obj.getClass().getFields();
        for(Field f: fields)
                {if(f.getType()==String.class)
                {        String oldString =(String)f.get(obj);
                    String newString = oldString.replace('a', 'b');
                f.set(obj, newString);
                }
                }
}
为什么字母改失败了,高手指点?顺便能多多介绍你对反射的理解么?
作者: 李深山    时间: 2012-3-17 15:20
没人帮我么?
作者: 段浩亮    时间: 2012-3-17 15:30
这个问题我遇见过 当时花了我一个多小时才找出原因
getField方法只能获得被public修饰的字段,getDeclaredField(String name)可以返回被任意权限修饰符修饰的字段
作者: 李深山    时间: 2012-3-17 16:31
getField方法只能获得被public修饰的字段,getDeclaredField(String name)可以返回被任意权限修饰符修饰的字段,
楼上正解,谢谢,又了解一招
作者: 泮和顺    时间: 2012-3-19 17:11
本帖最后由 泮和顺 于 2012-3-19 17:15 编辑

1建议用获取声明属性那个方法 2如果是private修饰成员变量要调用一个可访问方法设置成true就行啦




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