定义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()方法设为true
Field 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);
}
}
}
}
运行结果为: