Java 反射学习(二)成员变量的反射

来源:互联网 发布:网络三剑客官方下载 编辑:程序博客网 时间:2024/05/16 20:31

定义ReflectPoint类

public class ReflectPoint{private int x;public int y;public ReflectPoint(int x, int y){super();this.x = x;this.y = y;}}

 

定义ReflectTest类

import java.lang.reflect.Field;import javax.activation.FileDataSource;public class ReflectTest{public static void main(String[] args) throws Exception{ReflectPoint pt1=new ReflectPoint(3, 5);//getField()只能得到可见的(此处y为共有)Field fieldY=pt1.getClass().getField("y");System.out.println(fieldY.get(pt1));//打印结果为:5//getDeclaredField()可以得到不可见的(此处x为私有),但须要将其setAccessible()方法设为trueField fieldX=pt1.getClass().getDeclaredField("x");fieldX.setAccessible(true);System.out.println(fieldX.get(pt1));//打印结果为:3}}

简单应用:将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的"b"改为"a"。

 

更改ReflectPoint类为:

public class ReflectPoint{private int x;public int y;public String str1="bab";public String str2="bac";public String str3="cad";public ReflectPoint(int x, int y){super();this.x = x;this.y = y;}public String toString(){return str1+" "+str2+" "+str3;}}


更改ReflectTest类为:


 

import java.lang.reflect.Field;import javax.activation.FileDataSource;public class ReflectTest{public static void main(String[] args) throws Exception{ReflectPoint pt1=new ReflectPoint(3, 5);changeStringValue(pt1);System.out.println(pt1);}private static void changeStringValue(Object obj)throws Exception{Field[] fields=obj.getClass().getFields();for(Field field : fields){if(field.getType()==String.class){String oldValue=(String)field.get(obj);String newValue=oldValue.replace('b','a');field.set(obj,newValue);}}}}


运行结果为:

 

0 0
原创粉丝点击