![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Tomcat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2003 Где: Гродно, Беларусь Репутация: нет Всего: 2 |
Посоветуйте, кто чем может. Вопрос такой: имеется функция f(Object obj), которая делает всевозможные действия, взависисмости от того, какого класса является объект obj, т.е. если obj является строкой, то делать одно действие, если Boolean, то другое и т.д. Я реализовал это следующим образом:
if(obj instanceof String) procedure1(); else if(obj instanceof Boolean) procedure2(); else if(obj instanceof Integer) procedure3(); ... аналогично с другими классами ..... Но мне это особо не нравиться. Можно ли реализовать это каким-либо другим способом, и если можно то как? |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 8 Всего: 48 |
Вообще-то есть такая замечательная вещь как полиморфизм, который решает все эти проблемы. Для его реалзации тебе надо написать интерфейс, в котором объявить некоторый метод. Далее объявить классы которые будут реализовывать (implement) этот интерфейс и наследовать классы String, Boolean и т.д. Тогда в метод f(Object obj) ты будешь передавать не Object, а твой интерфейс, и в теле метода будешь вызывать метод интерфейса, а тот благодаря механизму полиморфизма будет вызывать методы твоих классов.
-------------------- Account removed |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 8 Всего: 48 |
P.S. При такой реализации, тебе придеться использовать вместо стандартных классов твои собственные Это сообщение отредактировал(а) Sun - 23.5.2003, 16:52 -------------------- Account removed |
|||
|
||||
| SVK |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 22.5.2003 Репутация: нет Всего: 1 |
Sorry - тупой вопрос, вероятно: а почему нельзя сделать просто набор методов с разными входными параметрами?
viod f (String s) { procedure1(); } viod f (Boolean b) { procedure2(); } viod f (Integer i) { procedure3(); } ... аналогично с другими классами ..... |
|||
|
||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: 11 Всего: 16 |
Потому что при передавании параметра не приводится из объекта к данному параметру. то есть если попробовать передать все это как f(obj ) - будет ошибка компиляции, так как нет процедуры с обектом в качестве параметра...
|
|||
|
||||
| Tomcat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2003 Где: Гродно, Беларусь Репутация: нет Всего: 2 |
Спасибо, народ! Честно признаюсь, сглупил. Даже мысли не пришло полиморфизм использовать. Но теперь все нормально.
|
|||
|
||||
![]()
|
| Правила форума "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. |