黑马程序员技术交流社区
标题:
关于反射的问题
[打印本页]
作者:
Inspur
时间:
2013-9-15 10:06
标题:
关于反射的问题
本帖最后由 Inspur 于 2013-9-20 10:50 编辑
/*
将任意一个对象中的String类型的变量所对应的字符串内容中的b改为a
*/
import java.lang.reflect.*;
class ReflectDemo
{
public static void main(String[] args) throws Exception
{
Printed obj = new Printed();
ojbectChanged(obj);
System.out.println(obj.toString());
}
public static void ojbectChanged(Object obj) throws Exception
{
Field[] Fields = obj.getClass().getFields();
for(Field field:Fields)
{
if(field.getType() == String.class)
{
String oldValueString = (String)field.get(obj);
System.out.println(oldValueString);
String newValueString = oldValueString.replace('b', 'a');
System.out.println(newValueString);
field.set(obj, newValueString);
}
}
}
}
class Printed
{
String a = "ball";
String b = "basketball";
public String toString()
{
return a+" "+b;
}
}
运行没有出现想要的结果,请高手解决,谢谢
作者:
2012
时间:
2013-9-15 10:25
问题出现在 Field[] Fields = obj.getClass().getFields();这行代码,
1.getFields()方法不能获取到私有的属性,你的Printed 类中的两个属性值都是私有的访问权限。
2.利用反射的条件,需要在Printed类中给两个属性添加get和set方法。
如果你想获取Printed类的私有属性,可以使用getDeclaredFields();这个方法。
希望对你有所帮助!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2