【Util】java copy bean 反射

本文介绍了一种使用Java泛型和反射机制实现的Bean复制方法,该方法能够将一个继承自特定基类的对象的属性值复制到另一个实现了相同接口的对象中。通过获取基类的声明字段并遍历设置,实现了跨类之间的属性复制。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/inforstack/article/details/50549883
	@SuppressWarnings("unchecked")
	public <S, T> T copySuperBean(Object source,  Class<T> target) throws InstantiationException, IllegalAccessException{
		if (source == null) {
			return null;
		}
		if (target == null) {
			target = (Class<T>) source.getClass();
		}
		T newBean = target.newInstance();
		Class<? extends Object> ss = source.getClass();
		Class<?> ann = 	ss.getSuperclass();
		if (ann.newInstance() instanceof BaseMsg && newBean instanceof WechatMessage) {
			Field[] fields = ann.getDeclaredFields();
	        for (Field field : fields) {  
	            Object value = null;  
	            String name = field.getName();
	            String upperName = name.substring(0, 1).toUpperCase() + name.substring(1);  
	            try {  
	            	String getName = String.format("get%s", upperName);
	            	String setName = String.format("set%s", upperName);
	            	 Method getMethod = source.getClass().getMethod(getName,  new Class[] {});
	        	    Method setMethod = newBean.getClass().getMethod(setName,  new Class[] {field.getType()});
	        	    value = getMethod.invoke(source);
	                if (value == null) {
	                    continue;  
	                }
	                setMethod.invoke(newBean, value);
	            } catch (Exception e) {  
	                e.printStackTrace();  
	            }  
	        }
		}
        return newBean;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值