我在家看张老师的教学视频,讲到反射时做了一个练习,我就照着视频上敲了一遍,但结果却不一样?求高手讲解,谢谢- //需求:将任意一个Person类的对象中所有String类型的属性中'a'换成'b'
- public class ReflectDemo {
-
- public static void main(String[] args) throws Exception {
- Person p = new Person(20);
- changeString(p);
- System.out.println(p);
- }
- public static void changeString(Object obj) throws Exception{
- //通过反射获取字段对象数组
- Field [] fields = obj.getClass().getFields();
- //遍历数组
- for(Field field:fields){
- //判断字段对象的类型是否为String类型
- if(field.getType()== String.class){
- //获取传入对象的String类型属性
- String oldStr = (String)field.get(obj);
- //创建一个新的属性,替代之前String类型的属性
- String newStr = oldStr.replace('a','b');
- //将新创建的String类型属性设为这个对象的属性。
- field.set(obj, newStr);
- }
- }
-
- }
-
-
- }
- class Person{
- String name = "zhangsan" ;
- String str = "itcast";
- int age ;
-
- Person(int age) {
- super();
- this.age = age;
- }
- public String toString(){
- return "姓名:"+name+":"+str;
- }
-
复制代码 |