我想了解java中的clone()方法下面发生了什么,我想知道如何比进行新调用更好publicclassPersonimplementsCloneable{privateStringfirstName;privateintid;privateStringlastName;//constructors,gettersandsetters@OverrideprotectedObjectclone()throwsCloneNotSupportedException{Personp=(Person)super.clone();returnp;}}这是我的克隆代码,我想知道下面发生了什么,以及新
我使用Java有一段时间了,我一直听说诸如Cloneable、Iterable和其他X-able之类的接口(interface)。我想知道是否有所有这些的列表,更重要的是-您日常经常使用哪些?例如,我读到过Cloneable被认为写得很糟糕并且没有被广泛使用。 最佳答案 来自API文档:AccessibleStreamableAdapterActivatorOperationsCallableCloneableCloseableComparableCompilableDestroyableExternalizableFlushabl
我正在尝试克隆一个Integer类的对象,它确实实现了可克隆接口(interface)。Integera=newInteger(4);Integerb=a.clone();我知道有解决办法,但我必须这样实现。为什么我收到这个错误=clone()在java.lang.Object中具有protected访问权限为什么会这样说?clone方法不是clonable接口(interface)的publicabstract方法吗,跟object有什么关系。提前致谢:-) 最佳答案 java.lang.Integer是不可变的。没有理由克隆一个
Android的Intent为什么要实现Cloneable?Intent是否被克隆?Intent的clone()implementation在调用构造函数而不是调用super.clone()时被破坏。Intent的子类如果被克隆(相应的Androidbug),保证有破坏行为。 最佳答案 你为什么关心clone(),你用过这个吗(不是为了Intent,而是根本)?它在java(http://www.artima.com/intv/bloch13.html)中有点损坏,我总是使用复制构造函数。此外,据我所知,您不能真正扩展Intent。
Java中的Cloneable本质上是错误的。具体来说,我对接口(interface)最大的问题是它需要一个不定义方法本身的方法行为。因此,如果遍历Cloneable列表,您必须使用反射来访问其定义的行为。但是,在Java8中,我们现在有了默认方法,现在我想问为什么Cloneable中没有默认的clone()方法。我明白为什么interfacescannotdefaultObjectmethods,但是,这是一个明确的设计决定,因此可以有异常(exception)。我有点设想弃用Object.clone()并将其内部代码更改为类似以下内容:if(thisinstanceofClonea
所以,我一直在阅读设计模式,而原型(prototype)模式让我感到困惑。我相信使用它的要点之一是避免使用new运算符。然后我看这个例子:http://sourcemaking.com/design_patterns/prototype/java/1首先,他们对Prototype的想法实现了一个clone()方法,这很奇怪。维基百科还说我需要一个由子类实现的纯虚方法克隆(为什么?)。难道Java不是已经提供了这样的方法,可以准确地完成我们需要它做的事情(即创建一个对象的副本而不是从头开始实例化它)吗?其次,clone方法调用操作符new!这个例子肯定是错的?(在那种情况下,我应该在其他
这个问题在这里已经有了答案:Whyistheclone()methodprotectedinjava.lang.Object?(11个答案)关闭9年前。我知道clone()是一个protected方法,但“protected”意味着特定类的所有子类都可以访问它。任何Java类都是Object的子类,那么这里的protected方法是什么原因呢?为什么我们只能在实现Cloneable接口(interface)的类上调用clone()?我不明白它与Object中的clone()被声明为protected这一事实有何关联。
我正在阅读如何正确执行数组的深层复制,但是我对#clone()的实现方式感到困惑。它是java.lang.Object类的成员,但如果您阅读javadocs:First,iftheclassofthisobjectdoesnotimplementtheinterfaceCloneable,thenaCloneNotSupportedExceptionisthrown.那么为什么首先要在那里定义clone方法呢?当然,如果一个方法只能在存在接口(interface)时使用,那么您应该将该方法放在接口(interface)中。Cloneable接口(interface)本身是空的;它只是J
我有一个Queueq1,它是作为LinkedList实现的,我想定义一个Queueq2,它是一个单独的,但Queueq1.的相同实例Queue没有实现Cloneable,我该怎么做? 最佳答案 在一行中:newLinkedList(myQueue);自QueueextendsCollection,并且集合有一个构造函数接受另一个Collection,这是进行浅层克隆的快速方法。替换LinkedList用你自己的Queue如果您愿意,可以实现。此外,请阅读javadoc。他们有所有的答案。
本节我们会讨论Cloneable接口,这个接口指示一个类提供了一个安全的clone()方法。Object类提供的clone()方法是“浅拷贝”,并没有克隆对象中引用的其他对象,原对象和克隆的对象仍然会共享一些信息。深拷贝指的是:在对象中存在其他对象的引用的情况下,会同时克隆对象中引用的其他对象,原对象和克隆的对象互不影响。介绍克隆要了解克隆的具体含义,先来回忆为一个包含对象引用的变量建立副本时会发生什么。原变量和副本都是同一个对象的引用(见图6-1)。这说明,任何一个变量改变都会影响另一个变量。Employeeoriginal=newEmployee("JohnPublic",50000);E