![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| ElKa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 300 Регистрация: 1.2.2006 Репутация: 2 Всего: 4 |
есть список объектов разных классов, поэтому в качестве класса указан Object
надо для каждого из них вызвать метод getName(), который есть в каждом классе но для этого надо указать класс ((...)object).getName() как можно его узнать? |
|||
|
||||
| yar |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 8.9.2007 Где: Одесса, Украина Репутация: 1 Всего: 8 |
Класс объекта узнать можно с помощью рефлексии. Однако сделать так как ты хочешь нельзя - привести объект к неизвестному на этапе компиляции классу. Здесь можно поступить несколькими способами.
1. Реализовать в каждом классе некий интерфейс, имеющий необходимый метод. Затем приводить наши Object-ы к этому интерфейсу и вызывать метод... 2. Вызвать метод с помощью рефлексии
3. Или использовать "утиную типизацию" (если нет возможности реализовать в классах интерфейс); как её можно эмулировать в Java я описал вот тут. --------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг |
|||
|
||||
| ElKa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 300 Регистрация: 1.2.2006 Репутация: 2 Всего: 4 |
yar,
спасибо! Я реализовала так:
Это нормально? Как я понимаю, проще нельзя. |
|||
|
||||
| Ortega |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 5.11.2005 Где: Харьков, Украина Репутация: 4 Всего: 6 |
Это путь наименьшего сопротивления и его право на жизнь зависит от масштабов того, частью чего этот код является. В принципе, это неправильно, и вся моя ООП сущность против такого издевательства. Однако если речь идет о (относительно) небольшой программке, то можно и так. Товарищ yar предложил два отличных способа. Причем первый - предпочтительнее. Вам можетбыть лень так делать, однако поверьте мне - потом может быть значительно хуже --------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок |
||||
|
|||||
| alexadr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 25.9.2006 Репутация: 4 Всего: 4 |
Однозначно 1-ый вариант описанный yar
А вот это лучше не использовать даже в маленьких программках, т.к. часто они очень быстро разрастаются |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Сделал бы именно так, но когда работаешь с другими системами, где реализовать интерфейс невозможно, и придется писать наследника, который наследуется от целевого класса и реализует класс Nameable, тоже туго. Приведенный поход не развалится, если его правильно реализовывать. Я вижу правильный подход такой:
т.е. такой черный ящичек. Когда нам надоест добавлять классы, мы сможем легко поменять на рефлексию. Это сообщение отредактировал(а) Platon - 18.8.2008, 11:29 |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Причем мы видим преимущество приведенного мной подхода, мало того, что код легко поддерживать, и нам неважно как он работает, плюс наш метод работает еще и как адаптер.
|
|||
|
||||
| ElKa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 300 Регистрация: 1.2.2006 Репутация: 2 Всего: 4 |
я так ничего и не поняла
как реализовать первый вариант? Это сообщение отредактировал(а) ElKa - 18.8.2008, 11:44 |
|||
|
||||
| alexadr |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 25.9.2006 Репутация: 4 Всего: 4 |
интервейс
реализующие этот интерфейс классы:
использование всего ентого добра:
|
||||||
|
|||||||
| ElKa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 300 Регистрация: 1.2.2006 Репутация: 2 Всего: 4 |
alexadr,
то есть придется везде вместо Object писать GetNameInterf? |
|||
|
||||
| AxNe0 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 24.4.2006 Где: St. Petersburg Репутация: 4 Всего: 5 |
ElKa, если это для решения твоей задачи с вызовом toEffString(), то это неправильный подход с точки зрения ООП!
Это сообщение отредактировал(а) AxNe0 - 18.8.2008, 13:14 |
|||
|
||||
| ElKa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 300 Регистрация: 1.2.2006 Репутация: 2 Всего: 4 |
AxNe0,
какой подход неправильный? мой? |
|||
|
||||
| alexadr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 25.9.2006 Репутация: 4 Всего: 4 |
||||
|
||||
| AxNe0 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 24.4.2006 Где: St. Petersburg Репутация: 4 Всего: 5 |
ElKa, да.
|
|||
|
||||
| ElKa |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 300 Регистрация: 1.2.2006 Репутация: 2 Всего: 4 |
а почему FirstClass_name, а не FirstClass? |
||||
|
|||||
![]()
|
| Правила форума "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. |