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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> superInstance -> extendedInstance, как быстро создать экземпляр? 
:(
    Опции темы
FlasH
Дата 1.9.2006, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть объект базового класса: 
CommonClass superInstance;
нужно создать на основе данных в superInstance ещё один объект класса ExtendedClass extends CommonClass.

как можно это сделать изящно?
сейчас создаю новый объект и вручную копирую все поля из superInstance в новый объект. Но это ведь долго? От инициализации полей ExtendedClass, естественно, никуда не деться. 
Но поля базового класса ведь уже определены в superInstance? Нельзя ли их как-нибудь заклонировать, и к тому что получилось довесить инициализацию расширенных полей?
PM MAIL   Вверх
carper
Дата 1.9.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



FlasH
А, что clone() разве не занимается абсолютно тем же копированием?

Более того, часто именно так и поступают - переопределяют clone() для всех нестандартных случаев, например, для более "глубокого" клонирования, и ручками его, ручками.

Я что-то никогда не читал о том, что clone() как-то экономит время исполнения (разве что самого программиста - ну так и напишите аналог своего clone- фабрики, пускай метод суперкласса создает экземпляр дочернего класса, инициализирует его поля как хочет и возвращает вам созданный объект).

Или я чего не понимаю?

Это сообщение отредактировал(а) carper - 1.9.2006, 10:31
PM MAIL   Вверх
LSD
Дата 1.9.2006, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Если только у CommonClass создать конструктор который принимал бы в качестве аргумента объект типа CommonClass и инициализировал свои поля значениями переданного объекта. А у ExtendedClass вызывать super(CommonClass).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
FlasH
Дата 1.9.2006, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(carper @  1.9.2006,  10:30 Найти цитируемый пост)
Более того, часто именно так и поступают - переопределяют clone() для всех нестандартных случаев, например, для более "глубокого" клонирования, и ручками его, ручками.

вот это и есть та самая грустная процедура, от которой я хочу избавиться. Пользоваться clone() удобно, но для клонирования super Instance в super Instance, а extended Instance ни при делах. 

Цитата(LSD @  1.9.2006,  10:43 Найти цитируемый пост)
Если только у CommonClass создать конструктор который принимал бы в качестве аргумента объект типа CommonClass и инициализировал свои поля значениями переданного объекта. А у ExtendedClass вызывать super(CommonClass). 

А через Reflection тоже никак не получится? Ручное кодирование, помимо длительности, чревато ещё и ошибками. 
PM MAIL   Вверх
zera
Дата 1.9.2006, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 19.1.2006
Где: saint-petersburg

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



org.apache.commons.beanutils.PropertyUtils.copyProperties (Object, Object) не подойдет?

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


Новичок



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

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



Цитата(zera @  1.9.2006,  11:51 Найти цитируемый пост)
org.apache.commons.beanutils.PropertyUtils.copyProperties (Object, Object) не подойдет?

нет :-( только пакеты из стандартной поставки JVM
PM MAIL   Вверх
LSD
Дата 1.9.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(FlasH @  1.9.2006,  12:49 Найти цитируемый пост)
А через Reflection тоже никак не получится?

Получится, только медленно это.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
w1nd
Дата 1.9.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(LSD @ 1.9.2006,  15:52)
Получится, только медленно это.

И насколько медленнее?


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
w1nd
Дата 1.9.2006, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(w1nd @ 1.9.2006,  20:48)
И насколько медленнее?

Сам потестил: примерно в четыре раза.

Это сообщение отредактировал(а) w1nd - 2.9.2006, 13:12


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Nobody
Дата 4.9.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 16



Цитата(FlasH @ 1.9.2006,  14:21)
Цитата(zera @  1.9.2006,  11:51 Найти цитируемый пост)
org.apache.commons.beanutils.PropertyUtils.copyProperties (Object, Object) не подойдет?

нет :-( только пакеты из стандартной поставки JVM

Дурацкое ограничение какое-то.


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

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

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


 




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


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

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