利用反射原理用get/set方法设置属性(也可用clone,但如果有特殊处理的东西,这个好用)

先创建一个POJO,如User,里面所有属性都用get/set方法,假设original是User的一个实例对象,已经设置了各种属性,现在要把属性赋值到新对象里去。

public User testCopy(User original){
	User copy=new User();
	Class<User> cla=(Class<User>) original.getClass();
	Method[] ffs=cla.getDeclaredMethods();//获取所有声明的方法,不包含父类里的方法
	for (Method method : ffs) {
		//如果有需要特殊处理的可以这样写
		if(method.toString().contains(".getBjs()")){
			//处理过程
			continue;
		}
		if(method.toString().contains(".get")){//获取get方法
			Object obj=method.invoke(original, null);//获取调用get方法后获得的对象
			if(obj!=null){
				Class[] cls=new Class[]{obj.getClass()};//返回值类型数组,后面调用对应set方法时要用此类型对应的参数类型
				String str=method.toString();
				int start=str.indexOf(".get");
				str=str.substring(start, str.length());
				String setmethod=str.replace(".get", "set").replace("()", "");//处理含包名、类名、方法名及括号的get方法,变成只有方法名且没有括号的set方法
				Method m=cla.getDeclaredMethod(setmethod,cls);//set方法的参数类型和get方法的返回值类型对应
				m.invoke(copy, obj);//调用set方法设置值
			}
		}
	}
	return copy;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值