草庐IT

cloneable

全部标签

Java:Cloneable 接口(interface)的基本原理

为什么java.lang.Cloneable接口(interface)中没有指定.clone()方法? 最佳答案 基本上,这是一个损坏的界面。KenArnold和BillVenners在JavaDesignIssues中讨论过它。.阿诺德:IfIweretobeGodatthispoint,andmanypeopleareprobablygladIamnot,IwouldsaydeprecateCloneableandhaveaCopyable,becauseCloneablehasproblems.Besidesthefactth

java - Cloneable 在 Java 中如何工作以及如何使用它?

我想知道以下内容:Cloneable意味着我们可以克隆或复制对象,通过实现Cloneable接口(interface)。有什么优点和这样做有什么坏处?如果对象是复合对象? 最佳答案 关于Cloneable,你应该知道的第一件事是——不要使用它。Cloneable对实现克隆非常困难,不值得。使用一些其他选项代替它,例如apache-commonsSerializationUtils(深度克隆)或BeanUtils(浅克隆),或者简单地使用复制构造函数。Seehere了解JoshBloch关于使用Cloneable进行克隆的观点,这解释

java - 为什么 Cloneable 没有被弃用?

一般理解是Java中的Cloneable接口(interface)坏了。原因有很多,我就不说了;others已经做了。也是Javaarchitects的位置自己。因此,我的问题是:为什么还没有被弃用?如果核心Java团队决定它被破坏了,那么他们一定也考虑过弃用。他们反对这样做的原因是什么(在Java8中是stillnotdeprecated)? 最佳答案 有一个bug1997年提交给JavaBugDatabase关于将clone()方法添加到Cloneable中,这样它就不再无用了。它以“无法修复”的决议关闭,理由如下:Sun'sT

java - 为什么 java.lang.Object 中的 clone() 方法受到保护?

clone()的具体原因是什么?在java.lang.Object中被定义为protected? 最佳答案 clone受到保护的事实非常令人怀疑-clone方法未在Cloneable接口(interface)中声明。这使得该方法对于获取数据副本毫无用处,因为你不能说:if(ainstanceofCloneable){copy=((Cloneable)a).clone();}我认为Cloneable的设计现在在很大程度上被认为是一个错误(以下引用)。我通常希望能够实现接口(interface)Cloneable但不一定要实现接口(in

java - 为什么 java.lang.Object 中的 clone() 方法受到保护?

clone()的具体原因是什么?在java.lang.Object中被定义为protected? 最佳答案 clone受到保护的事实非常令人怀疑-clone方法未在Cloneable接口(interface)中声明。这使得该方法对于获取数据副本毫无用处,因为你不能说:if(ainstanceofCloneable){copy=((Cloneable)a).clone();}我认为Cloneable的设计现在在很大程度上被认为是一个错误(以下引用)。我通常希望能够实现接口(interface)Cloneable但不一定要实现接口(in

java - 如何正确覆盖克隆方法?

我需要在我的一个没有父类(superclass)的对象中实现深度克隆。处理父类(superclass)(即Object)抛出的已检查CloneNotSupportedException的最佳方法是什么?一位同事建议我按以下方式处理:@OverridepublicMyObjectclone(){MyObjectfoo;try{foo=(MyObject)super.clone();}catch(CloneNotSupportedExceptione){thrownewError();}//Deepclonememberfieldsherereturnfoo;}这对我来说似乎是一个很好的解

java - 如何正确覆盖克隆方法?

我需要在我的一个没有父类(superclass)的对象中实现深度克隆。处理父类(superclass)(即Object)抛出的已检查CloneNotSupportedException的最佳方法是什么?一位同事建议我按以下方式处理:@OverridepublicMyObjectclone(){MyObjectfoo;try{foo=(MyObject)super.clone();}catch(CloneNotSupportedExceptione){thrownewError();}//Deepclonememberfieldsherereturnfoo;}这对我来说似乎是一个很好的解