直接贴代码吧。。
package com.java8;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
/**
* 将 src Object 通过java反射机制转化为target Object
* @author stupidwolf
*
*/
public class CastSrcObjToTargObj {
/**
*
* @param src 源类 实例
* @param targetObjectClassName 将被转化的目的类,需提供具体的 class name(例如 "aaa.bb.c.ClassName"),
* 以及该类需要提供一个无参的构造方法 ;
* @return 如果能够转换则返回经反射处理后得到的目的类的实例,否则返回null
*/
public static Object castSrcObjToTargObj (Object srcInstance, String targetObjectClassName) {
Class<?> targetClazz = null;
Object targetInstance = null;
try {
targetClazz = Class.forName(targetObjectClassName);
targetInstance = targetClazz.newInstance();
Field[] srcFields = srcInstance.getClass().getDeclaredFields();
Field[] targFields = targetInstance.getClass().getDeclaredFields();
for (int i = 0, srcLength = srcFields.length; i < srcLength; i ++) {
srcFields[i].setAccessible(true);
for (int j = 0, targLength = targFields.length; j < targLength; j ++ ) {
if (targFields[j].getName().equals(srcFields[i].getName()) &&
!Modifier.isFinal(targFields[i].getModifiers())) {
targFields[j].setAccessible(true);
targFields[j].set(targetInstance,
srcFields[i].get(srcInstance)
);
break;
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return targetInstance;
}
}