黑马程序员技术交流社区
标题:
字段反射
[打印本页]
作者:
也许依然
时间:
2014-4-4 23:58
标题:
字段反射
本帖最后由 也许依然 于 2014-4-7 17:17 编辑
为什么打印出来的字符没有改变呢?
public class ReflectPoint {
private int x;
public int y;
String str1 = "ball";
String str2 = "basketball";
String str3 = "itcast";
public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
public String toString(){
return str1+":"+str2+":"+str3;
}
}
复制代码
ReflectPoint pt1 = new ReflectPoint(3,5);
changeStringValue(pt1);
System.out.println(pt1);
public static void changeStringValue(Object obj) throws Exception{
Field [] fields = obj.getClass().getFields();
for(Field field : fields){
//判断字段的类型是不是String的类型
if(field.getType() == String.class){
String oldValue = (String)field.get(obj);
String newValue = oldValue.replace('b', 'a');
//替换完成后要将字段值重新设置
field.set(obj,newValue);
}
}
}
复制代码
结果为
ball:basketball:itcast
作者:
Engle
时间:
2014-4-5 00:16
你的代码就有一行代码有问题:
Field [] fields = obj.getClass().getFields();
应该改成:
Field [] fields = obj.getClass().getDeclaredFields();
因为getFields()方法只能获得类的公有属性,
而getDeclaredFields()能获得类的所有属性
作者:
也许依然
时间:
2014-4-5 00:53
Engle 发表于 2014-4-5 00:16
你的代码就有一行代码有问题:
Field [] fields = obj.getClass().getFields();
应该改成:
thank you 啦
作者:
枫儿
时间:
2014-4-7 10:53
楼主你好,如果问题已解决,请将帖子改为提问结束,如果没有解决请楼主继续提问,谢谢合作
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2