| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Присваивание объекта |
| Автор: devmstr 21.2.2007, 08:15 |
| Что будет содердать ms1? Mouse ms0= new Mouse(...); ms1 = ms0; Что он будет содержать ссылку на ms0 или его копию? |
| Автор: tux 21.2.2007, 08:19 |
ms1 будет содержать ссылку на объект, созданный с помощью 'new Mouse()'. ms0 будет содержать точно такую же ссылку. |
| Автор: devmstr 21.2.2007, 08:26 |
| Понятно, а как мне тогда создать копию объекта? |
| Автор: djGri 21.2.2007, 12:16 |
| ms1 = ms0.clone(); (У Mouse должен быть переопределен clone(), который он наследовал у object'a ) |
| Автор: _Y_ 21.2.2007, 13:39 |
| Поскольку разные объекты клонируются по разному, единой схемы разработано быть не может. Ну, например, у объекта имеется ссылка на главное окно программы. Естественно, что у клона должна быть такая же ссылка (главное окно-то одно). Другой объект содержит редактируемое JTextField, из которого он берет данные. Естественно, что при клонировании должно быть создано новое поле, содержащее тот же текст (иначе один и тот же текст будет сообщаться всем клонированным объектам). Таким образом, только сам объект знает как себя клонировать и метод clone почти всегда должен писаться вручную. Всегда жаль расстраивать хороших людей |
| Автор: nornad 21.2.2007, 14:55 |
Особенно если учесть, насколько редко требуется создавать полную копию объекта со всем его содержимым. Много чаще хватает просто второй ссылки. |
| Автор: _Y_ 21.2.2007, 17:31 | ||
Я, собственно, хотел доходчиво объяснить идею. А удачный пример, да на вскидку - это не ко мне, это к гуру ЗЫ. Такой пример привел именно потому, что у меня была подобная задача с GI когда-то давно и именно на ней я в вопросах клонирования разобрался. Правда это была не Java, а VB6 (тА еще гадость в плане объектном модели). Кстати, а почему в исключительных? Сделал объект, расклонировал, добавил все клоны в контейнер и радуйся жизни |
| Автор: LSD 21.2.2007, 17:38 | ||
А если он уже был добавлен? У двух разных компонентов будет общий контейнер, при этом сам контейнер "знает" только об одном. Плюс всевозможные листенеры, тоже не понятно, что с ними делать. Да и GUI компоненты довольно плохо клонируются, т.к. там куча классов, которые не клонируемы и реализация которых скрыта, вот попробуй тот же Graphics клонировать. |
| Автор: _Y_ 21.2.2007, 18:12 | ||||||
По моему мы говорим о разных вещах. Я вроде не прелагал клонировать UI компоненты. Я писал
Т.е. клонируется какой-то объект данных, хранящий ссылку на новое JTextField. А уж как оно создается - объект его знает. Самое простое - в конструкторе объекта прописать
но вариантов может быть много. Так что ни о каком клонировании UI я, вроде не говорил. |
| Автор: devmstr 22.2.2007, 07:13 |
| Спасибо! Буду знать! |