通过反射改变变量

接着昨天的反射继续来,这篇就讲一个小题目。在一个java类中有三个String类型的成员变量,现在要通过反射来将这三个字符串变量当中的字符b变为a.上代码:

public class RefBean {
	public String str1="boy";
	public String str2="buss";
	public String str3="girl";
	public String toString() {
		return str1+"<>"+str2+"<>"+str3;	
	}
}
这是有三个String变量的java类,重写它的toString方法,方便待会打印。下面实现题目要求:

public static void main(String[] args) throws Exception {
		RefBean ref = new RefBean();
		System.out.println("改变之前:"+ref);
		//通过先得到它的字节码,反射得到它的成员变量
		Field[] fields = ref.getClass().getFields();
		for(Field field :fields){
			//这里要用==
			if(field.getType() == String.class){
				String oldValue =(String)field.get(ref);
				String newValue = oldValue.replace("b","a");
				field.set(ref,newValue);
			}
		}
		System.out.println("改变之后:"+ref);
	}

1.在上面的实体类中我们重写了toString 方法,但我们在后面打印的时候直接可以打印对象名即可,这样系统会自动调用该对象的toString方法进行字符串的输出。

2.上面注释“这里要用==”,是因为在这句代码里我们进行的是类型的比较,而equals方法对比的值,内容的不同,在这里行不通。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值