(JAVA子类引用指象父类引用)JAVA克隆对象,包括父类属性,无需实现序列化接口
来源:互联网 发布:京东全球购 关税 知乎 编辑:程序博客网 时间:2024/06/13 16:55
最近做一个东西,需要拷贝一个对象,而且父类属性也需要拷贝。.很多人可能会说直接引用待拷贝的对象就可以了。但是这个方法支持了使用子类引用指象父类引用。以下是代码:/**
- /** 将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 sourceValue=fields[i].get(sourceObj);
- fields[i].set(targetObj,sourceValue );
- }
- if(clazz.getSuperclass()==Object.class){
- return;
- }
- cpoyObjAttr(sourceObj,targetObj,clazz.getSuperclass());
- }
/** 将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 sourceValue=fields[i].get(sourceObj); fields[i].set(targetObj,sourceValue );}if(clazz.getSuperclass()==Object.class){return;}cpoyObjAttr(sourceObj,targetObj,clazz.getSuperclass()); }
以下是单元测试:
- @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();
- }
- }
- (JAVA子类引用指象父类引用)JAVA克隆对象,包括父类属性,无需实现序列化接口
- Java 父类引用指向子类对象
- Java 多态 父类引用子类对象
- java父类引用指向子类对象
- java父类引用指向子类对象
- java 父类引用指向子类对象
- java父类引用指向子类对象
- java 引用数据类型实现 对象的克隆
- 关于java基础中,接口里面父类的对象指向子类的引用
- Java父类对象引用指向子类对象
- Java基础-父类对象对子类对象的引用
- 【Java学习笔记】父类引用指向子类对象之属性
- java多态性详解——父类引用子类对象
- java多态性详解——父类引用子类对象
- Java 中深层理解父类引用指向子类对象
- java多态,如何理解父类引用指向子类对象
- java多态性详解——父类引用子类对象
- Java多态性详解——父类引用子类对象
- hdu 2050 折线分割平面
- Xcode升级4.6后的Bug处理
- 我用过的强大的常用的 Web Debugging Tool
- MyEclipse中java模板配置和快捷键的配置
- 将Object转换成动态指定的对象,将一个实例引用指向一个Object引用
- (JAVA子类引用指象父类引用)JAVA克隆对象,包括父类属性,无需实现序列化接口
- 八皇后问题
- 【学习】从HttpClient3迁移到HttpClient4
- 一个阳历转农历的java程序
- 测试驱动开发的艺术
- Java中通过java.util.Properties读取配置文件
- 算法实现系列第二章.堆排序
- java 中list按bean某个属性排序
- java 日期和小时相加减处理