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.