如何克隆Java对象节能
民生评论 2020-11-13 15:58 字号: 大 中 小
可克隆的接口和深拷贝
默认情况下,Java中的类并不支持克隆;默认执行clone()方法会生成一个CloneNotSupportedException异常。你不应当考虑执行clone()方法。
记住,你必须使其公开,在方法内,你的首先操作必须为one()。想要允许克隆的类必须执行标记接口Cloneable。虽然默认执行失败与碰壁是不可避免的one只会执行一次浅拷贝。需要深拷贝时,类必须忽略克隆才能提供一个定制的执行。基本上,如果你想要使类对象公开可克隆,你需要使用以下代码:
class Test implements Cloneable
{
...
public Object clone()
{
try
{
return one();
}
catch ( CloneNotSupportedException e )
{
return null;
}
}
...
}
如果你乐于接受一个受保护的克隆,它只会盲目地复制对象的源代码,你就不必重新定义你自己的版本。但是,你往往想要一个公开克隆。(注意:你不能建立一个私有或默认范围克隆;你只能提高忽略时的可见性。)
可能出现的问题及解决方案
由于clone()方法受到保护,子类必须用一个公开方法忽略这个受保护的方法,明确同意其为可克隆。所有Collections类完成这个任务。子类还必须对one()中的默认克隆机制执行Cloneable。
如果你知道一个对象拥有公开clone()方法,但在编译时你不知道这个对象的类型,这时就会出现问题。例如,假设宣称x为一个Object。你不能只是调用one(),因为one()受到保护。
如果Cloneable定义了一个公开clone()方法,你可以使用((Cloneable) x).clone(),但它不能。你要么必须列举所有你认为可能为x的类,或者求助于反射。
在你试图深拷贝一个复杂的对象时还会遇到另一个问题。你假定所有成员对象变量的clone()方法也执行深拷贝;这种来到奥拉星假设具有相当大的风险。你必须控制所有类的代码,或者你必须知道深拷贝操作涉及的所有类都以正确的方式完成了拷贝。
解决这些问题的一个方法是使用序列化克隆。序列化常用于将对象发送到某处(如文件中或络内),以便其他人稍后可以重建它们。你可以利用序列化立即自行重建对象。
如果对象完全可序列化,那么重建应为一个可靠的拷贝。在正常使用序列化的情况下,原始对象远非一个可靠的拷贝;它可能在世界的另一面,在络连接的远端。你可以确信修改拷贝不会对原始对象造成影响。
Peter V. Mikhalenko是一名Sun认证专家,现任德意志银行商业顾问。
:张琎
查看本文国际来源
潍坊白斑医院复方鳖甲软肝片全疗程用药多少钱清远治疗白癜风医院-
-
老总话冰雪红松体育张雪松探索少年滑雪培训
【老总话冰雪】红松体育张雪松探索少年滑雪培训2022年北京冬...
2020-08-10 | 民生评论
-
-
苏炳添获伯明翰室内大奖赛男子米冠军图
苏炳添获伯明翰室内大奖赛男子米冠军(图)中国短跑名将苏炳...
2020-07-08 | 民生评论
-
-
何时买房最划算揭秘最佳买房时机八大原则搭配
何时买房最划算?揭秘最佳买房时机八大原则各地楼市频频传...
2020-06-07 | 民生评论
-
-
克洛普萨拉赫该拿英超MVP他表现不比丁丁搭配
克洛普:萨拉赫该拿英超MVP 他表现不比丁丁差克洛普:萨拉赫...
2020-05-30 | 民生评论
-
-
石家庄藁城身份证重号驾驶本难办
石家庄藁城:身份证重号 驾驶本难办 (记者 王向峰 报...
2019-07-15 | 民生评论
-
-
华为内部曝上亿元受贿窝案116名员工涉嫌
华为内部曝上亿元受贿窝案116名员工涉嫌腐败[ 未经华为官方...
2019-07-13 | 民生评论