阿里巴巴Java开发手册重点解读(二)深拷贝
来源:互联网 发布:阿里云服务器欠费 编辑:程序博客网 时间:2024/05/20 22:37
编程规约-OOP规约-19
【推荐】慎用 Object 的 clone 方法来拷贝对象。
说明: 对象的 clone 方法默认是浅拷贝,若想实现深拷贝需要重写 clone 方法实现属性对象
的拷贝。
什么是浅拷贝?
对象下级如果有对象数组如域成员f1=new Object[10],拷贝出来的对象的域成员f1还是指针引用至源对象的成员f1指向的那个对象,也就是说域成员如果是对象的话,只拷贝引用,不拷贝对象本身。
什么是深拷贝?
当前对象及其关联对象,全部都是新对象
深拷贝的实现方案
反射模式:
org.apache.commons.beanutils.PropertyUtils.copyProperties(Object dest, Object orig)
org.apache.commons.beanutils.BeanUtils.copyProperties(Object dest, Object orig)
字节码代理模式:(效率更高)
使用net.sf.cglib.beans.BeanCopier.copy(Object paramObject1, Object paramObject2, Converter paramConverter),这个工具类可以实现同类型拷贝,也可以实现不同类型的拷贝,添加转换器还可以实现不同属性的拷贝。
不过copier创建的代价较高,应该缓存起来,在已用过的类型上不反复创建copier。
还可以用org.dozer.DozerBeanMapper
可以看看这几篇博文:
对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
BeanCopier系列之一:特性测试
Dozer扫盲级教程
Dozer开发手册
关于BeanCopier的一些思考 - ImportNew
高能预警
bean的拷贝或者映射是很常见的,如requestMap转命令对象,resultSet转java bean,显然无需重复造轮子。
但一定要考虑性能问题,选择一个工具包,要熟读其官方的建议,如BeanCopier应缓存,BeanMapper应单例等。
还有,如果对象结构是异构的,要自己做些细节的调整,写/注册一些Converter。
- 阿里巴巴Java开发手册重点解读(二)深拷贝
- 阿里巴巴Java开发手册重点解读(一)
- 阿里巴巴JAVA开发手册(二)
- 阿里巴巴Java开发手册个人整理精简版(二)
- 阿里巴巴Java开发手册学习笔记(二)
- 阿里巴巴 JAVA 开发手册
- 阿里巴巴 JAVA 开发手册
- 阿里巴巴Java开发手册
- 阿里巴巴 JAVA 开发手册
- 阿里巴巴Java开发手册
- 阿里巴巴 Java开发手册
- 阿里巴巴Java开发手册
- 《阿里巴巴 Java 开发手册》
- 阿里巴巴Java开发手册
- 阿里巴巴 Java 开发手册
- 阿里巴巴Java开发手册
- 阿里巴巴Java开发手册
- 阿里巴巴Java开发手册
- json格式值班表解析
- python定义函数
- 29.笔记go语言——函数多类型参数
- 30.笔记go语言——关于闭包
- [转自Oracle官方技术博客]如何分析发生在过去的数据库性能问题
- 阿里巴巴Java开发手册重点解读(二)深拷贝
- 关系业务
- 31.笔记go语言——go doc命令
- 2017年10月2日12:20:57
- 32.笔记go语言——range关键字
- 33.笔记go语言——switch关键字
- grub2无法引导win7的问题
- 栈的实现
- Spark SQL用户自定义函数UDF及Apache日志实例