Object.Clone 方法

定义

创建并返回此对象的副本。

[Android.Runtime.Register("clone", "()Ljava/lang/Object;", "GetCloneHandler")]
protected virtual Java.Lang.Object Clone ();
[<Android.Runtime.Register("clone", "()Ljava/lang/Object;", "GetCloneHandler")>]
abstract member Clone : unit -> Java.Lang.Object
override this.Clone : unit -> Java.Lang.Object

返回

此实例的克隆。

属性

例外

如果此对象的 类不实现 接口,则 Cloneable 为 。

注解

创建并返回此对象的副本。 “copy”的确切含义可能取决于对象的类。 一般意图是,对于任何对象 x,表达式为: <blockquote>

x.clone() != x

</blockquote> 将为 true,并且表达式为: <blockquote>

x.clone().getClass() == x.getClass()

</blockquote> 将为 true,但这些不是绝对要求。 虽然通常的情况是: <blockquote>

x.clone().equals(x)

</blockquote> 将为 true,这不是绝对要求。

按照约定,应通过调用 super.clone来获取返回的对象。 如果一个类及其所有超类 () Object 遵守此约定,则 情况是 x.clone().getClass() == x.getClass()

按照约定,此方法返回的对象应独立于) 克隆的此对象 (。 若要实现这种独立性,可能需要在返回之前修改 返回 super.clone 的 对象的一个或多个字段。 通常,这意味着复制包含所克隆对象的内部“深层结构”的任何可变对象,并将对这些对象的引用替换为对副本的引用。 如果类仅包含基元字段或对不可变对象的引用,则通常不需要修改 返回 super.clone 的对象中的字段。

Object的 方法clone执行特定的克隆操作。 首先,如果此 对象的 类未实现 接口 Cloneable,则会 CloneNotSupportedException 引发 。 请注意,所有数组都被视为实现 接口Cloneable,并且数组类型的T[]方法的clone返回类型是T[]其中 T 是任何引用或基元类型。 否则,此方法创建此 对象的 类的新实例,并用此对象的相应字段的内容初始化其所有字段,就像通过赋值一样;字段的内容本身不会克隆。 因此,此方法执行此对象的“浅表复制”,而不是“深层复制”操作。

Object本身不实现 接口 Cloneable,因此对类为 Object 的对象调用 clone 方法将导致在运行时引发异常。

java.lang.Object.clone()Java 文档。

此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。

适用于