栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么不推荐使用Cloneable?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么不推荐使用Cloneable?

有一个错误在1997年提交给Java的错误数据库有关添加

clone()
方法
Cloneable
,所以将不再是无用的。它以“无法解决”的决议关闭,理由如下:

Sun的技术审查委员会(TRC)仔细考虑了此问题,建议不要采取 任何措施,除非改进当前Cloneable接口的文档 。这是建议的全文:

现有的Java对象克隆API存在问题。在java.lang.Object上有一个受保护的“克隆”方法,在接口java.lang.Cloneable中也有。目的是,如果一个类希望允许其他人克隆它,则它应该支持Cloneable接口,并使用公共克隆方法覆盖默认的受保护克隆方法。不幸的是,由于时间的推移,人们很容易迷失时间,因此Cloneable接口没有定义克隆方法。

这种组合导致相当多的混乱。一些类声称支持Cloneable,但偶然忘记支持clone方法。对于Cloneable应该如何工作以及克隆应该做什么,开发人员感到困惑。

不幸的是,向Cloneable添加“克隆”方法将是不兼容的更改。它不会破坏二进制兼容性,但是会破坏源兼容性。轶事证据表明,实际上,在许多情况下,类支持Cloneable接口,但无法提供公共克隆方法。经过讨论,TRC一致建议我们不要修改现有的Cloneable接口,因为它会影响兼容性。

另一种建议是添加一个新接口java.lang.PubliclyCloneable以反映Cloneable的原始预期目的。TRC建议以5到2的多数反对。主要担心的是,这将使本来已经很混乱的画面更加混乱(包括拼写混乱!)。

TRC一致建议,我们应该在现有的Cloneable接口中添加其他文档, 以更好地描述其预期用途以及为实现者描述“最佳实践”。

因此,尽管这并不是直接 弃用 ,但不使Cloneable成为“弃用”的原因是技术评论委员会决定 修改现有文档足以
使此接口有用。因此,他们做到了。直到Java 1.4为止,

Cloneable
文档记录如下:

一个类实现Cloneable接口,以向Object.clone()方法指示该方法为该类的实例进行逐域复制是合法的。

尝试克隆未实现Cloneable接口的实例会导致抛出CloneNotSupportedException异常。

接口Cloneable不声明任何方法。

从Java 1.4(2002年2月发布)到最新版本(Java 8),它看起来像这样:

一个类实现Cloneable接口,以向Object.clone()方法指示该方法为该类的实例进行逐域复制是合法的。在未实现Cloneable接口的实例上调用Object的clone方法会导致抛出CloneNotSupportedException异常。

按照约定,实现此接口的类应使用公共方法重写Object.clone(受保护的)。有关重写此方法的详细信息,请参见Object.clone()。

请注意,此接口不包含clone方法。因此,仅凭对象实现此接口的事实就不可能克隆对象。即使克隆方法是反射式调用的,也不能保证它会成功。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486533.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号