jialisoftw

JAVA克隆对象,包括父类属性,无需实现序列化接口

最近做一个东西,需要拷贝一个对象,而且父类属性也需要拷贝。.很多人可能会说直接引用待拷贝的对象就可以了。但是这个方法支持了使用子类引用指象父类引用。以下是代码:/**

 

Java代码:  
  1. /** 将sourceObj的属性拷贝到targetObj 
  2.      * @param sourceObj 
  3.      * @param targetObj 
  4.      * @param clazz 从哪一个类开始(比如sourceObj对象层级为:Object->User->ChineseUser->ChineseMan->ChineseChongQingMan) 
  5.      * 如果需要从ChineseUser开始复制,clazz就指定为ChineseUser.class 
  6.      */  
  7.     public static void cpoyObjAttr(Object sourceObj,Object targetObj, Class<?> clazz)throws Exception{  
  8.         if(sourceObj==null || targetObj==null){  
  9.             throw new Exception("源对象和目标对象不能为null");  
  10.         }  
  11.         Field[] fields=clazz.getDeclaredFields();  
  12.         for(int i = 0; i < fields.length; i++){  
  13.              fields[i].setAccessible(true);  
  14.              Object sourceValue=fields[i].get(sourceObj);  
  15.              fields[i].set(targetObj,sourceValue );  
  16.         }  
  17.         if(clazz.getSuperclass()==Object.class){  
  18.             return;  
  19.         }  
  20.         cpoyObjAttr(sourceObj,targetObj,clazz.getSuperclass());  
  21.            
  22.     }  
 以下是单元测试:
Java代码:  
  1. @Test  
  2. public void cpoyObjAttrTtest(){  
  3.     ChineseMan chineseMan=new ChineseMan();  
  4.     chineseMan.setUserName("程序员");  
  5.     chineseMan.setCat(new Cat("tom"));  
  6.        
  7.     try {  
  8.         ChineseManExtend chineseManExtend=new ChineseManExtend();  
  9.         ObjectTool.cpoyObjAttr(chineseMan, chineseManExtend, chineseMan.getClass());  
  10.         System.out.println(chineseManExtend.getUserName());  
  11.         System.out.println(chineseManExtend.getCat().getCatName());  
  12.   
  13.     } catch (Exception e) {  
  14.         // TODO Auto-generated catch block  
  15.         e.printStackTrace();  
  16.     }  
  17. }  
  18. 原文参考站长网http://www.software8.co/wzjs/java/2495.html  如需转载请注明

posted on 2013-01-09 09:28 飞猪一号 阅读(1736) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

<2013年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

常用链接

留言簿

随笔档案

友情链接

搜索

最新评论

阅读排行榜

评论排行榜