黑马程序员技术交流社区
标题:
高新技术里“成员变量反射综合案例”结果不对
[打印本页]
作者:
贾旭
时间:
2012-3-21 23:38
标题:
高新技术里“成员变量反射综合案例”结果不对
本帖最后由 贾旭 于 2012-3-21 23:56 编辑
package cn.itcast.day1;
import java.lang.reflect.*;
public class Demo {
public static void main(String[] args) throws Exception{
ReflectPoint pt1=new ReflectPoint();
show(pt1);
System.out.println(pt1);
}
public static void show(Object ob) throws Exception{
Field[] fields = ob.getClass().getFields();
for(Field field:fields){
if(field.getType()==String.class){
String oldValue=(String)field.get(ob);
String newValue=oldValue.replace('b', 'c');
field.set(ob,newValue);
}
}
}
}
这是ReflectPoint类
package cn.itcast.day1;
public class ReflectPoint {
String st1="bbb";
String st2="bbaa";
String st3="bbbdd";
public String toString(){
return st1+"::"+st2+"::"+st3;
}
}
复制代码
结果总是:bbb::bbaa::bbbdd
但是我目的是让它把b改成C啊。
谢谢各位帮忙了。
作者:
欧阳博
时间:
2012-3-21 23:48
Field[] fields = ob.getClass().getFields();改为 Field[] fields = ob.getClass().getDeclaredFields();
作者:
♂诸侯♂
时间:
2012-3-21 23:51
我当时按照代码做的时候成功的了。你调试一下。按照视屏张老师讲的调试方法。调试一下。应该是哪里写错。还有贴代码的时候。有对尖括号可以贴代码。那样易读还不容易出错。
作者:
欧阳博
时间:
2012-3-21 23:57
知道原因吗? 因为getFields()是访问Class对象所表示的类或接口的所有可访问公共字段,而你的ReflectPoint类里头的属性是无控制符的,默认是Default,所以就得用getDeclaredFields();,当然你也可以把你的ReflectPoint类里头的属性改成public的,那就getFields()就可以。
作者:
贾旭
时间:
2012-3-21 23:58
♂诸侯♂ 发表于 2012-3-21 23:51
我当时按照代码做的时候成功的了。你调试一下。按照视屏张老师讲的调试方法。调试一下。应该是哪里写错。还 ...
谢谢提醒怎么贴代码,我还以为大家用什么厉害的编辑器呢,剪切过来就成这样了。呵呵:D
作者:
贾旭
时间:
2012-3-22 00:02
啊啊……我知道哪里的问题了。原来我的
public String st1="bbb";
public String st2="bbaa";
public String st3="bbbdd";
都是默认的protected权限。访问都访问不到,还怎么修改啊。晕死了。
灰常感谢楼上的几位啊,谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2