读书少,文笔差,写的不好望勿喷
前两天,我开发的部分需要通过历史数据来重新引用业务单,由于这是数据是从旧系统里来的,对象名于新系统的不一样,为了方便区分于管理,也不能一样.
但是新旧对象简单参数大多是样的,我第一反应就是通过反射来对对象进行拷贝.
由于学艺不精,于是去百度了反射的写法.
写完了,测试两个不同名称的对象拷贝也成功了,于是去继续任务....然而,并不行......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