最近做一個(gè)東西,需要拷貝一個(gè)對(duì)象,而且父類屬性也需要拷貝。.很多人可能會(huì)說直接引用待拷貝的對(duì)象就可以了。但是這個(gè)方法支持了使用子類引用指象父類引用。以下是代碼:/**
Java代碼:
- /** 將sourceObj的屬性拷貝到targetObj
- * @param sourceObj
- * @param targetObj
- * @param clazz 從哪一個(gè)類開始(比如sourceObj對(duì)象層級(jí)為:Object->User->ChineseUser->ChineseMan->ChineseChongQingMan)
- * 如果需要從ChineseUser開始復(fù)制,clazz就指定為ChineseUser.class
- */
- public static void cpoyObjAttr(Object sourceObj,Object targetObj, Class<?> clazz)throws Exception{
- if(sourceObj==null || targetObj==null){
- throw new Exception("源對(duì)象和目標(biāo)對(duì)象不能為null");
- }
- Field[] fields=clazz.getDeclaredFields();
- for(int i = 0; i < fields.length; i++){
- fields[i].setAccessible(true);
- Object sourceValue=fields[i].get(sourceObj);
- fields[i].set(targetObj,sourceValue );
- }
- if(clazz.getSuperclass()==Object.class){
- return;
- }
- cpoyObjAttr(sourceObj,targetObj,clazz.getSuperclass());
-
- }
以下是單元測(cè)試:
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();
- }
- }
- 原文參考站長(zhǎng)網(wǎng)http://www.software8.co/wzjs/java/2495.html 如需轉(zhuǎn)載請(qǐng)注明