草庐IT

Cloneable

全部标签

java - Java的clone()方法是实现多态克隆的唯一途径吗?

我需要为我的类(class)配备多态克隆(深拷贝),即我需要这样的东西才能工作:SuperTypeoriginal=newSubType();SuperTypecopy=original.clone();其中original.clone()可以被任何机制替代以创建深拷贝,copy的实际类型应为SubType,因为original也是一个SubType。clone()方法和Cloneable接口(interface)是实现此目的的唯一方法吗?不能使用工厂方法和复制构造函数,因为实际的类只在运行时才知道,对吧?除了那些序列化-反序列化方法和Javadeep-cloninglibrary之外

java - 原型(prototype)是反模式吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion当JoshuaBloch提到Cloneable接口(interface)在Java中被破坏时,为什么使用clone()方法来促进对象创建的Prototype模式不被视为Java开发中的反模式?"It'sashamethatCloneableisbroken,butithappens."-JoshuaBloch

java - 为什么 java.lang.Cloneable 没有覆盖 java.lang.Object 中的 clone() 方法?

java.lang.Cloneable接口(interface)的Java规范将自身定义为表示任何扩展它的对象也已经实现了clone()方法,该方法在其中处于hibernate状态java.lang.Object。具体来说,它说:AclassimplementstheCloneableinterfacetoindicatetothejava.lang.Object#clone()methodthatitislegalforthatmethodtomakeafield-for-fieldcopyofinstancesofthatclass.对我来说,这意味着应该假设每个扩展Cloneab

java - 使用复制构造函数而不是 Object.clone 进行深度复制的正确方法

我有一些代码使用Object.clone执行深层复制,但我正在尝试使用更“可接受”的复制构造函数技术重写它。下面是我正在尝试做的两个简单示例,第一个使用克隆,第二个使用复制构造函数。使用克隆的深拷贝importjava.util.*;abstractclassPersonimplementsCloneable{Stringname;publicObjectclone()throwsCloneNotSupportedException{returnsuper.clone();}}classTeacherextendsPersonimplementsCloneable{intcourses

java - CloneNotSupportedException 即使在实现 Cloneable 时也是如此

为什么以下代码在JDK7中抛出CloneNotSupportedException而在JDK6中不抛出?publicclassDemoThreadextendsThreadimplementsCloneable{/***@paramargs*/publicstaticvoidmain(String[]args){DemoThreadt=newDemoThread();t.cloned();}publicDemoThreadcloned(){try{return(DemoThread)super.clone();}catch(CloneNotSupportedExceptione){e.

java - 克隆是否提供了优于构造函数/工厂方法的性能改进?

我正在维护一个较旧的Java代码库(jvm1.4),它似乎使用克隆作为对象实例化的替代方法,我猜这是一种性能优化。这是一个人为的例子:publicclassFoo{privateSomeObjectobj;//SomeObjectimplementsCloneablepublicFoo(){obj=newSomeObject();obj.setField1("abc");//thesefieldswillhavethesamevalueeverytimeobj.setField2("def");}publicvoiddoStuff(){SomeObjectnewObj=obj.clon

java - 什么时候 Java 对象可序列化但不可克隆才有意义?

如果Java类实现了Serializable接口(interface)但没有公共(public)的clone()方法,通常可以像这样创建深拷贝:classCloneHelper{@SuppressWarnings("unchecked")publicstaticTclone(Tobj){try{ByteArrayOutputStreambaos=newByteArrayOutputStream();ObjectOutputStreamoos=newObjectOutputStream(baos);oos.writeObject(obj);oos.close();byte[]bytes=

java - java中cloneable接口(interface)有什么用?

作为标记接口(interface),实现可克隆接口(interface)有什么用?我总是可以在我的类中创建一个publicObjectclone()方法。可克隆接口(interface)的实际用途是什么? 最佳答案 这是因为如果您的对象不是Cloneable,clone()方法会抛出CloneNotSupportedException。你应该看看documentationforclone()方法。以下是Object类中clone()方法的声明方式:protectedObjectclone()throwsCloneNotSupport

Java 的 Eclipse Galileo 的 "clone()"方法生成器

存储库提供的EclipseGalileo中用于生成java的clone()方法的最佳工具是什么?是什么原因阻止Eclipse开发人员将此工具包含在标准版本中? 最佳答案 很难正确地实现clone()。这样做被认为不是一个好的做法。Bloch(EffectiveJava)建议避免使用clone()。使用其他浅克隆方法,例如复制构造函数或commons-beanutils等实用程序。 关于Java的EclipseGalileo的"clone()"方法生成器,我们在StackOverflow上

java - Java克隆的优势

我在网上寻找有关java克隆的教程,但只发现了clone()的缺点,而没有发现优点。我想知道使用Javaclone()的一些优点。 最佳答案 克隆当然有其用途。想象一下任何类型的业务应用程序,其中您拥有以对象表示的数据记录,您可以“另存为”(复制和重命名)。如果该数据保存在实现Cloneable接口(interface)的对象中,那么您可以克隆原始数据并使用新信息更新它。这优于创建新对象实例并显式复制所有数据。有些人使用执行复制的帮助程序类和方法来解决这个问题,但是您拥有在类本身之外复制类所需的信息,这是糟糕的OO编程。我喜欢的另一