clone

作用:

得到对象的副本。


使用方法:

1. 实现Cloneable接口(一个空接口,没有需要实现的方法)

2. 覆盖Object#clone方法。

 3. 在clone方法中调用super.clone()完成对象的浅拷贝(可能会抛出CloneNotSupportedException,需要try-catch)

    这里说明了如果要想成功clone一个对象则要求它的超类都实现了Cloneable接口

4. 如果需要完成定制拷贝(深拷贝,修改信息等)在clone()中加入定制代码。

    深浅拷贝的区别在于如何处理成员对象,深拷贝要求成员对象也要分别拷贝出一份,浅拷贝则直接复制了成员对象的引用。

    深拷贝具有层次的概念,即N深拷贝,只完成前N层深拷贝,其余的使用浅拷贝。

    可以使用发射和递归完成完全深拷贝。大致步骤描述如下:首先采用java reflection技术动态获取成员方法列表。然后视clone的深         度,对具备clone条件的并且有必要clone的成员进行逐一clone。这是一个递归的过程,直到clolne深度已到为止或者到对象已经没有     需要clone的成员属性为止。


Avoid implementing clone.

  • clone is very tricky to implement correctly in all circumstances, nearly to the point of being pathological
  • the importance of copying objects will always remain, since object fields often need to be defensively copied
  • copy constructors and static factory methods provide an alternative to clone, and are much easier to implement
If you need to extend a superclass that implements clone, then your subclass must implement clone as well. The quickest solution is for your subclass to simply throw an exception.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值