| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Распознания класса объекта |
| Автор: Tomcat 23.5.2003, 08:35 |
| Посоветуйте, кто чем может. Вопрос такой: имеется функция f(Object obj), которая делает всевозможные действия, взависисмости от того, какого класса является объект obj, т.е. если obj является строкой, то делать одно действие, если Boolean, то другое и т.д. Я реализовал это следующим образом: if(obj instanceof String) procedure1(); else if(obj instanceof Boolean) procedure2(); else if(obj instanceof Integer) procedure3(); ... аналогично с другими классами ..... Но мне это особо не нравиться. Можно ли реализовать это каким-либо другим способом, и если можно то как? |
| Автор: Sun 23.5.2003, 10:51 |
| Вообще-то есть такая замечательная вещь как полиморфизм, который решает все эти проблемы. Для его реалзации тебе надо написать интерфейс, в котором объявить некоторый метод. Далее объявить классы которые будут реализовывать (implement) этот интерфейс и наследовать классы String, Boolean и т.д. Тогда в метод f(Object obj) ты будешь передавать не Object, а твой интерфейс, и в теле метода будешь вызывать метод интерфейса, а тот благодаря механизму полиморфизма будет вызывать методы твоих классов. |
| Автор: Sun 23.5.2003, 11:00 | ||
P.S. При такой реализации, тебе придеться использовать вместо стандартных классов твои собственные |
| Автор: SVK 23.5.2003, 18:15 |
| Sorry - тупой вопрос, вероятно: а почему нельзя сделать просто набор методов с разными входными параметрами? viod f (String s) { procedure1(); } viod f (Boolean b) { procedure2(); } viod f (Integer i) { procedure3(); } ... аналогично с другими классами ..... |
| Автор: DarkDS 23.5.2003, 18:18 |
| Потому что при передавании параметра не приводится из объекта к данному параметру. то есть если попробовать передать все это как f(obj ) - будет ошибка компиляции, так как нет процедуры с обектом в качестве параметра... |
| Автор: Tomcat 24.5.2003, 08:48 |
| Спасибо, народ! Честно признаюсь, сглупил. Даже мысли не пришло полиморфизм использовать. Но теперь все нормально. |