| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java ME (J2ME) > Cast |
| Автор: W0LF 4.11.2006, 19:25 | ||||||
Допустим есть какой-то класс.
есть еще класс.
Классы разные, по разному работают но у них есть метод func в другом каком-нидь классе делаем :
так вот вопрос - как теперь у объекта о вызвать метод func? Примечание - мы не знаем, на какой объект ссылается в данный момент о. то ли на А то ли на В поэтому не можем его привести к классу А или классу В. Решение с интерфейсом не подходит! |
| Автор: powerOn 4.11.2006, 19:35 | ||
а оператор instanceof не поможет?
хотя, поскольку и Класс А и Класс В содержит метод func(), то можно приводить всегда к А, метод все равно вызовется класса В, ибо динамический поиск определяет метод по реальному типу объекта а не по типу ссылки.... |
| Автор: powerOn 4.11.2006, 19:49 |
Опа! Точно.. не заметил... |
| Автор: W0LF 4.11.2006, 20:03 | ||||||||
таких классов как А и В может быть очень много(это разные формы в приложении), поэтому не подходит много if делать, а потом еще и код править для добавления их... То-есть напрямую никак нельзя по ссылке привести к этому классу? Добавлено @ 20:06 Я конечно могу сделать два базовых класса, котрые делятся на Form и List. а от них уже наследовать все остальное. Тогда прокатит -
Но просто именно от этого кода я щас и пытаюсь избавиться |
| Автор: LSD 4.11.2006, 20:13 |
К какому этому? ;) Интерфейс именно для того и нужен, чтобы гарантировать что в классе есть метод с заданное сигнатурой. И в подобных случаях он очень хорошо подходит. Не понимаю почему ты не хочешь его использовать. |
| Автор: powerOn 4.11.2006, 20:14 | ||
Тогда один интерфейс конечно надо реализовывать во всех классах... А почему с интерфейсами не получается? |
| Автор: W0LF 4.11.2006, 20:37 |
| с интерфейсами получается. просто класс+интерфейс = +50 байт памяти |
| Автор: LSD 4.11.2006, 21:10 |
| 1. По моему даже для J2ME 50 байт это не такая уж и большая потеря. 2. Интерфейс будет существовать в единственном экземпляре, а увеличение размера класса от реализации интерфейса у меня получилось - 26 байт. 3. Сколько ты потеряешь на if-ах. |
| Автор: W0LF 5.11.2006, 01:09 |
| Да, действительно, мой интерфейс - 26 байт. КоммандЛистенер дает +50 байт. а что касается ифов, то инода наших американских друзей очень трудно убедить, что ифы эт хорошо, и что много КоммандЛистенеров это тож хорошо |
| Автор: javastic 5.11.2006, 17:11 | ||||
А почему бы не сделать атрибут в каждом из классов (например А и Б), который бы выглядел например как :
|
| Автор: LSD 6.11.2006, 00:38 | ||
А смысл? Проблема же в том как вызвать метод, с наименьшими затратами. На крайний случай getClass().getName() даст такой же эффект. И опять же объем. |
| Автор: W0LF 6.11.2006, 15:41 | ||||||
ага Ну да ладно. Придется сделать два базовых класса. включить туда func(). и делать
Спасибо всем за помощь! З.Ы. Просто хотел сделать че-то типа такого : ((o.getClass())o).func() строго за это не судите |