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



题目:利用反射技术修改类中的字段及成员变量的反射

作者: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 "替换后为:
"+str1+"	"+str2+"	"+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


版权声明:本文为博主原创文章,未经博主允许不得转载。

Stay Hungry, Stay Foolish, Walking in Life
原文地址:https://www.cnblogs.com/ywx-vashon/p/4895761.html