Я читаю о clone
от Effective Java
Он говорит, что в clone
первый метод будет называться должен быть super.clone()
В этом случае, я думаю, что в конце концов, мы в конечном итоге вызвав clone
из java.lang.Object
идти вверх по цепочке иерархии.
Но я думал, что клон объекта ничего не делает.
Глядя в код, я вижу:
protected native Object clone() throws CloneNotSupportedException;
и без реализации.
Но из параграфа кажется, что если класс имеет только примитивные поля, вызывающие
(ClassX) super.clone()
, то для создания клона достаточно.
Но как? super.clone
от Object
.Что делает клон супер?
ответ
Эта декларация в объекте
protected native Object clone() throws CloneNotSupportedException;
... означает, что метод clone
реализован в машинный код; т. е. за занавесом происходит волшебство.
Вы можете быть уверены, что Object.clone()
действительно что-то делает ... при условии, что вы объявили свой класс как реализующий Cloneable
. Но то, что это делает, не может быть выражено в простой Java.
Итак, это работает для примитивных типов? То есть делает что-то вроде «memcopy»? – Jim
Это немного напоминает memcopy. Он выполняет низкоуровневую копию всех полей и некоторую скрытую информацию в заголовке объекта. –
clone() - метод в Java для дублирования объекта. В Java объекты обрабатываются через ссылочные переменные, и нет оператора для копирования объекта - оператор присваивания дублирует ссылку, а не объект. Метод clone() предоставляет эту недостающую функциональность.
Правильно, когда вы клонируете объект, вы всегда должны называть super.clone()
(как первый оператор), а затем клонировать остальную часть своего объекта вручную, потому что, когда вы клонируете объект, вы должны убедиться, что сверхклассовая часть объекта тоже будет клонировать ...
Если объект не поддерживает клонирование, он выбрасывает CloneNotSupportedException
, это означает, что если вы попытаетесь клонировать супер-объект и получите исключение, вы можете 't реализовать объект clone также в вашем подтипе, и объект не может быть клонирован ... Существует несколько ситуаций, когда запрещается операция клонирования объектов.
- 1. что делает `супер()` в `__new__`
- 2. Что именно «супер» делает в моих приложениях?
- 3. Что делает супер действительно в python
- 4. клон(): ArrayList.clone() Я думал, что делает неполную копию
- 5. Что делает git svn клон без параметров для макета?
- 6. CoffeeScript: что делает ключевое слово «супер» в этом контексте?
- 7. Что здесь означает супер?
- 8. Как «супер» Python делает правильные вещи?
- 9. Что делает super() здесь
- 10. что делает logging.basicConfig делает?
- 11. Что такое `супер` в Ruby?
- 12. JQuery UI: Draggable клон и изменить клон
- 13. Что делает «&&»?
- 14. Что делает?
- 15. Что делает `? .`?
- 16. Что делает $()?
- 17. репо не создает отслеживание ветви, но мерзавец клон делает
- 18. Subversion -> Git migration: git clone не делает полный клон?
- 19. Спрашивайте супер супер
- 20. Вызов супер супер метод
- 21. У меня есть клон, теперь что?
- 22. Что такое хороший клон lQuery lightbox?
- 23. npm установка частных зависимостей не работает, но клон делает
- 24. Git версия оформления заказа? Клон не делает то, что я хочу
- 25. Swift Наследование: Супер супер
- 26. Что делает git remote add ssh?
- 27. Почему присвоение ссылки на супер делает переопределение невозможным?
- 28. Что делает супер (ClassName, self) в ClassName (object)? (Используется в Джанго документации)
- 29. Что касается клавиш-кандидатов и супер-ключей
- 30. Что такое супер в Objective-C?
В книге также должно быть указано, что использовать клон() не рекомендуется ... проблема заключается в том, что вы должны полагаться на суперкласс, реализующий метод должным образом, иначе вы столкнетесь с проблемой , Чтобы правильно клонировать объект, вы должны скопировать все поля (если файлы примитивны, они, очевидно, неизменяемы, поэтому вы можете просто скопировать ссылку, используя = вместо клонирования, как и для любого неизменяемого объекта). Вместо использования клона попробуйте конструктор копирования или статический заводский метод. Намного лучше. – Renato
'Object # clone' реализуется как собственный метод. См. Http://stackoverflow.com/questions/6825982/how-does-clone-work-under-the-hood –