Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копия класса 
:(
    Опции темы
ShkVal
Дата 19.11.2004, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 10.11.2004

Репутация: нет
Всего: 1



Народ подскажите пожалуйста.
Мне надо создать копию класса можно ли это как-то сделать. Или только переопределять clone() и ручками всё переприсваивать. И если в этот класс входят другие классы (т. е. объявлены переменные других классов) для них тоже переопределять clone(). Или всё-таки проще можно взять копии объектов?
PM MAIL   Вверх
Domestic Cat
Дата 19.11.2004, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Вот клоном и есть проще всего.


--------------------

PM   Вверх
ShkVal
Дата 19.11.2004, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 10.11.2004

Репутация: нет
Всего: 1



Чепез clone долго и у меня в классе объявлено много ArrayList. Это придётся ещё писать clone() и для объектов которые будут лежать в этих листах.
Может есть другие способы?
PM MAIL   Вверх
Domestic Cat
Дата 19.11.2004, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата
Чепез clone долго


Как это долго?

Цитата
Может есть другие способы?


Нет.


--------------------

PM   Вверх
ElectricalStorm
Дата 19.11.2004, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: 5
Всего: 9



клонирование через сериализацию


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Domestic Cat
Дата 19.11.2004, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата
клонирование через сериализацию


... предполагает работу сo стримами, что затормозит все а преимуществ нет - придется возиться с Сериалайзабл и ИО вместо clone(). Не подumal я об этом, правдa.
Добавлено @ 18:27
К тому же не все объекты в java.lang наследуют от Serializable, так что это не самая лучшая идея.


--------------------

PM   Вверх
Zandr
Дата 23.11.2004, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 433
Регистрация: 16.7.2004
Где: Новосибирск

Репутация: 9
Всего: 13



Цитата

public interface Cloneable

A class implements the Cloneable interface to indicate to the Object.clone() method that it is legal for that method to make a field-for-field copy of instances of that class.

Attempts to clone instances that do not implement the Cloneable interface result in the exception CloneNotSupportedException being thrown.

The interface Cloneable declares no methods.


Цитата

Class ArrayList:
...
All Implemented Interfaces:
Cloneable, Collection, List, RandomAccess, Serializable


Cloneable есть у многих стандартных вещей, у которых разумно было его вводить. Будешь переопределять clone() засовывай в декларацию класса, что он Cloneable - на всякий случай.
API Пушкин читать будет?

Это сообщение отредактировал(а) Zandr - 23.11.2004, 08:28
PM MAIL   Вверх
polosatij
  Дата 25.11.2004, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



я тут совсем не в тему влезу smile , но есть вопрос один: (поскольку вы уже эту тему обсуждаете)

Код

Object.clone();


создаст мне действительно копию или просто ссылки на "объекты" (переменные, методы) Object?

если действительно копия: то почему не
Код

Object object= new Object();


это дело вкуса или есть отличия smile



--------------------
PM   Вверх
AntonSaburov
Дата 25.11.2004, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Clone создаст копию всех полей, которые есть у класса. Но вот ссылки будут указывать на те же объекты, что и его предок.

Для Object дествительно по барабану - у него полей никаких нет.
PM MAIL WWW ICQ   Вверх
polosatij
  Дата 25.11.2004, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(AntonSaburov @ 25.11.2004, 16:08)
Для Object дествительно по барабану - у него полей никаких нет.


я имел ввиду : "мойОбъект"..

получается что clone лучше чем

мо= new мойОбъект() ? (если мойОбъект уже существует в памяти) -> имеется ввиду до прихода GC. Или я не прав?

скажи, а через clone я могу переписывать переменные, объекты?
или будет также получаться, как и

Код

p1= new Point(...);
// ...
p2= new Point(...);


smile

надеюсь понятно объяснил smile


--------------------
PM   Вверх
Domestic Cat
Дата 25.11.2004, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата
я имел ввиду : "мойОбъект"..

получается что clone лучше чем

мо= new мойОбъект() ? (если мойОбъект уже существует в памяти) -> имеется ввиду до прихода GC. Или я не прав?


и clone и оператор new создают новый объект, и тут ничего не поделаешь


--------------------

PM   Вверх
AntonSaburov
Дата 25.11.2004, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(Domestic @ 25.11.2004, 18:08)
и clone и оператор new создают новый объект, и тут ничего не поделаешь

Либо переписать clone так, чтобы возвращалась ссылка на this smile
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 25.11.2004, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата
Либо переписать clone так, чтобы возвращалась ссылка на this


Тогда получится ссылка нa тот же самый объekt, что может привести k нехорошим последствиям smile
Ссылку нa тот же самый объекt можнo еще проще получить:

Код

Object o = new Object();
Object o2 = o;



--------------------

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.