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 , не требуется изменять.

Метод clone для класса Object выполняет определенную операцию клонирования. Во-первых, если класс этого объекта не реализует интерфейс Cloneable, возникает CloneNotSupportedException исключение . Обратите внимание, что все массивы считаются реализацией интерфейса Cloneable и что тип возвращаемого clone значения метода типа T[] массива имеет T[] тип, где T — это любой ссылочный или примитивный тип. В противном случае этот метод создает новый экземпляр класса данного объекта и инициализирует все его поля точно содержимым соответствующих полей этого объекта, как будто путем присваивания; Содержимое полей само по себе не клонируется. Таким образом, этот метод выполняет "неглубокое копирование" данного объекта, а не операцию "глубокого копирования".

Класс Object сам по себе не реализует интерфейс Cloneable, поэтому вызов clone метода для объекта, класс которого является , Object приведет к созданию исключения во время выполнения.

Документация по Java для java.lang.Object.clone().

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.

Применяется к