您的位置:首页 > 其它

利用反射技术修改类中的字段(成员变量的反射)

2015-04-28 22:27 387 查看
题目:利用反射技术修改类中的字段及成员变量的反射

作者:Vashon

一、首先定义一个类如下:

class ReflectPoint {
private int x; //私有的
public int y;  //公用的

public String str1="ball";
public String str2="basketball";
public String str3="yangwenxue";

public ReflectPoint(){}

public ReflectPoint(int x,int y){
this.x=x;
this.y=y;
}
public String toString(){
return "替换后为:\n"+str1+"\t"+str2+"\t"+str3;
}
}


二、对以上的操作实现如下:

package com.ywx.gaoxin;

import java.lang.reflect.Field;

/**
* 1.成员变量的反射
* 2.利用反射技术修改某个类中属性的值(类中的权限修饰符必须是public才可以)
* 修改:将所有String类型的字段中的字符"b"修改为"a"
* @author yangwenxue
*
*/
public class ReflectTest {
public static void main(String args[]) throws Exception{

ReflectPoint re=new ReflectPoint(3,5);
Field fieldY= re.getClass().getField("y");
System.out.println("fieldY="+fieldY.get(re));

//因为ReflectPoint类中的x是私有的
Field fieldX= re.getClass().getDeclaredField("x");
fieldX.setAccessible(true);//设为可以访问
System.out.println("fieldX="+fieldX.get(re));
//修改String类型的字段
try {
changeStringvalue(re);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(re);
}
/**
* 将为String类型的字段中含有"b"的替换为"a"
* @param obj
* @throws Exception
*/
private static void changeStringvalue(Object obj) throws Exception{
Field[] fields= obj.getClass().getFields();
for(Field field : fields){
if(field.getType().equals(String.class)){//判断字段是否为String类型
String oldValue=(String) field.get(obj);
String newValue=oldValue.replace('b', 'a');
field.set(obj, newValue);
}
}
}
}


控制台输出为:

fieldY=5

fieldX=3

替换后为:

aall aasketaall
yangwenxue
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: