![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| FlasH |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 9.6.2006 Репутация: нет Всего: 1 |
Есть объект базового класса:
CommonClass superInstance; нужно создать на основе данных в superInstance ещё один объект класса ExtendedClass extends CommonClass. как можно это сделать изящно? сейчас создаю новый объект и вручную копирую все поля из superInstance в новый объект. Но это ведь долго? От инициализации полей ExtendedClass, естественно, никуда не деться. Но поля базового класса ведь уже определены в superInstance? Нельзя ли их как-нибудь заклонировать, и к тому что получилось довесить инициализацию расширенных полей? |
|||
|
||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 1 Всего: 8 |
FlasH
А, что clone() разве не занимается абсолютно тем же копированием? Более того, часто именно так и поступают - переопределяют clone() для всех нестандартных случаев, например, для более "глубокого" клонирования, и ручками его, ручками. Я что-то никогда не читал о том, что clone() как-то экономит время исполнения (разве что самого программиста - ну так и напишите аналог своего clone- фабрики, пускай метод суперкласса создает экземпляр дочернего класса, инициализирует его поля как хочет и возвращает вам созданный объект). Или я чего не понимаю? Это сообщение отредактировал(а) carper - 1.9.2006, 10:31 |
|||
|
||||
| LSD |
|
|||
![]() 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. |
|||
|
||||
| FlasH |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 9.6.2006 Репутация: нет Всего: 1 |
вот это и есть та самая грустная процедура, от которой я хочу избавиться. Пользоваться clone() удобно, но для клонирования super Instance в super Instance, а extended Instance ни при делах. А через Reflection тоже никак не получится? Ручное кодирование, помимо длительности, чревато ещё и ошибками. |
|||
|
||||
| zera |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 19.1.2006 Где: saint-petersburg Репутация: нет Всего: 9 |
org.apache.commons.beanutils.PropertyUtils.copyProperties (Object, Object) не подойдет?
|
|||
|
||||
| FlasH |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 9.6.2006 Репутация: нет Всего: 1 |
||||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Получится, только медленно это. -------------------- 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. |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
И насколько медленнее? -------------------- ![]() ![]() |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Сам потестил: примерно в четыре раза. Это сообщение отредактировал(а) w1nd - 2.9.2006, 13:12 -------------------- ![]() ![]() |
|||
|
||||
| Nobody |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 25.8.2003 Где: Россия, Москва Репутация: 4 Всего: 16 |
Дурацкое ограничение какое-то. -------------------- |
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |