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

来源:互联网 发布:承接淘宝服装代加工 编辑:程序博客网 时间:2024/05/29 05:04



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

作者: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 aasketaallyangwenxue


0 0