java反射(对象拷贝)

在开发中遇到需要从旧系统拷贝数据到新系统,使用反射进行对象拷贝。遇到问题,getFields无法获取父类字段,最终发现公司已有工具解决。分享简单反射拷贝代码,供初学者参考。
摘要由CSDN通过智能技术生成

读书少,文笔差,写的不好望勿喷

前两天,我开发的部分需要通过历史数据来重新引用业务单,由于这是数据是从旧系统里来的,对象名于新系统的不一样,为了方便区分于管理,也不能一样.

但是新旧对象简单参数大多是样的,我第一反应就是通过反射来对对象进行拷贝.

由于学艺不精,于是去百度了反射的写法.

写完了,测试两个不同名称的对象拷贝也成功了,于是去继续任务....然而,并不行......getFieds是那不到父类的参数名的.

我不知道是不是jdk7的缘故,看了好多别人的方法我都没能拿到,最后问了同事,原来我司早有工具,于是不写自己的方法了.

下班后深感惭愧.即使我没有公司框架写的好,还是应该写一下的,同时也为方便初学者参考一下,不要浪费太多的时间.

好,下面上代码

工具类的代码

package lsoft.reflect.tool;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

@SuppressWarnings("all")
public class ReflectUtils {
	
	/** 对象属性拷贝 */
	public static void copyPropertys(Object resource, Object target) {
		copyPropertys(resource, target, null);
	}
	
	/** 对象属性拷贝 
	 * @param ignoreSet 忽略(不拷贝的参数)
	 * */
	public static void copyPropertys(Object resource, Object target, Set<String>ignoreSet) {
		if(null == ignoreSet) {
			ignoreSet = new HashSet<>();
		}
		Class resurceClazz = resource.getClass();
		Class targetClazz = target.getClass();
		Set<String> fieldNameSet = getFieldNameSet(resurceClazz);
		Set<String> targetFielNameSet = getFieldNameSet(targetClazz);
		Iterator<String> fieldNameIter = fieldNameSet.iterator();
		while(fieldNameIter.hasNext()) {
			String fieldName = fieldNameIter.next();
			if(!ignoreSet.contains(fieldName) && !"id".equals(fieldName)) {//id不拷贝
				Iterator<String> targetFieldsIter = targetFielNameSet.iterator();
				while(targetFieldsIter.hasNext()) {
					String targetFielName = targetFieldsIter.next();
					if(targetFielName.equals(fieldName)) {
						try {
							getSetMethod(targetClazz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值