Java代码:
/** 将sourceObj的属性拷贝到targetObj
* @param sourceObj
* @param targetObj
* @param clazz 从哪一个类开始(比如sourceObj对象层级为:Object->User->ChineseUser->ChineseMan->ChineseChongQingMan)
* 如果需要从ChineseUser开始复制,clazz就指定为ChineseUser.class
*/
public static void cpoyObjAttr(Object sourceObj,Object targetObj, Class< > clazz)throws Exception{
if(sourceObj==null || targetObj==null){
throw new Exception("源对象和目标对象不能为null");
}
Field[] fields=clazz.getDeclaredFields();
for(int i = 0; i < fields.length; i++){
fields[i].setAccessible(true);
Object sourceva lue=fields[i].get(sourceObj);
fields[i].set(targetObj,sourceva lue );
}
if(clazz.getSuperclass()==Object.class){
return;
}
cpoyObjAttr(sourceObj,targetObj,clazz.getSuperclass());
}
以下是单元测试:
Java代码:
@Test
public void cpoyObjAttrTtest(){
ChineseMan chineseMan=new ChineseMan();
chineseMan.setUserName("程序员");
chineseMan.setCat(new Cat("tom"));
try {
ChineseManExtend chineseManExtend=new ChineseManExtend();
ObjectTool.cpoyObjAttr(chineseMan, chineseManExtend, chineseMan.getClass());
System.out.println(chineseManExtend.getUserName());
System.out.println(chineseManExtend.getCat().getCatName());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}