黑马程序员技术交流社区
标题:
成员变量反射设置值的问题
[打印本页]
作者:
马林康
时间:
2012-6-20 10:44
标题:
成员变量反射设置值的问题
本帖最后由 马林康 于 2012-6-20 12:23 编辑
反射主类代码
Student s =new Student(12,"zhangsan");
Field[] fields=s.getClass().getFields();
for(Field field :fields){
if(field.getType()==String.class){
String oldValue =(String) field.get(s);
String newValue=oldValue.replace('b' ,'a');
field.set(oldValue, newValue);
}
}
System.out.println(s);
复制代码
Student类
public class Student {
private int age;
private String name;
String str1="ball";
String str2="basketball";
String str3="good";
...省略部分代码
public String toString(){
return str1+":"+str2+":"+str3;
}
}
复制代码
运行之后输出仍然是原值,没有替换 ,然后我对照了一下视频 ,把字符串用public 修饰 ,结果报错 求助……
作者:
闾丘日月
时间:
2012-6-20 11:10
楼主set方法参数写错了。
set(obj,value)第一个参数应该是Student对象的一个实例,将它改为field.set(s,newValue)
作者:
李天甲
时间:
2012-6-20 11:24
public static void main(String[] args) throws Exception {
Student s =new Student(12,"zhangsan");
Field[] fields=s.getClass().getDeclaredFields();
System.out.println(fields.length);
for(Field field :fields){
System.out.println(field.getType());
if(field.getType()==String.class){
field.setAccessible(true);
String oldValue =(String) field.get(s);
System.out.println(oldValue);
String newValue=oldValue.replace('b' ,'a');
//field.set(oldValue, newValue);//这个写错了呵呵
field.set(s,newValue);//传入对象,传入新值
}
}
System.out.println(s);
复制代码
呵呵,刚才调试来着,你set方法错了,楼上正解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2