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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码如下:
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);
                }
                }
}
为什么字母改失败了,高手指点?顺便能多多介绍你对反射的理解么?

4 个回复

倒序浏览
没人帮我么?
回复 使用道具 举报
这个问题我遇见过 当时花了我一个多小时才找出原因
getField方法只能获得被public修饰的字段,getDeclaredField(String name)可以返回被任意权限修饰符修饰的字段
回复 使用道具 举报
getField方法只能获得被public修饰的字段,getDeclaredField(String name)可以返回被任意权限修饰符修饰的字段,
楼上正解,谢谢,又了解一招
回复 使用道具 举报
本帖最后由 泮和顺 于 2012-3-19 17:15 编辑

1建议用获取声明属性那个方法 2如果是private修饰成员变量要调用一个可访问方法设置成true就行啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马