立即注册
 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广州大学城网业务调整

[Java/JSP] JAVA克隆对象,包括父类属性,无需实现序列化接口 [复制链接] qrcode

查看: 2165 | 回复: 0

大法师的 该用户已被删除
发表于: 2013-1-9 15:19:54 | 显示全部楼层

最近做一个东西,需要拷贝一个对象,而且父类属性也需要拷贝。.很多人可能会说直接引用待拷贝的对象就可以了。但是这个方法支持了使用子类引用指象父类引用。以下是代码:/**
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.setAccessible(true);   
14.               Object sourceValue=fields.get(sourceObj);  
15.               fields.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.  }  

QQ 744437114
  疯狂软件官网:http://www.fkjava.org
  疯狂java视频 android视频:http://www.fkjava.org/video.html
跳转到指定楼层
快速回复 返回顶部 返回列表