博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用反射技术修改类中的字段(成员变量的反射)
阅读量:5067 次
发布时间:2019-06-12

本文共 1599 字,大约阅读时间需要 5 分钟。

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

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

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

转载于:https://www.cnblogs.com/ywx-vashon/p/4895761.html

你可能感兴趣的文章
Linux0.11内核--加载可执行二进制文件之1.copy_strings
查看>>
编写Nginx启停服务脚本
查看>>
这些老外的开源技术养活了很多国产软件
查看>>
看图软件推荐
查看>>
【IdentityServer4文档】- 欢迎来到 IdentityServer4
查看>>
安全测试的一些漏洞和测试方法
查看>>
spring框架学习笔记(八)
查看>>
vim格式化代码
查看>>
探索 ConcurrentHashMap 高并发性的实现机制
查看>>
Web服务器超时处理
查看>>
keil C 51 strlen库函数使用
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
编程原则 流水账
查看>>
tomcat URL乱码问题
查看>>
wpf首次项目开发技术总结wpf页面
查看>>
python numpy sum函数用法
查看>>
Linux中的SELinux详解--16
查看>>
php变量什么情况下加大括号{}
查看>>
less入门
查看>>