题目:利用反射技术修改类中的字段及成员变量的反射
作者: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
版权声明:本文为博主原创文章,未经博主允许不得转载。
Stay Hungry, Stay Foolish, Walking in Life