![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 6 Всего: 24 |
Ситуация такая, есть базовый класс (Class1), у него есть ряд потомков (Class2 и Class3). У каждого из типов должна быть ф-ия getID к-ая бы возвращала ID связанный с классом (для каждого класса ID известен за ранее).
Хотелась бы чтоб эта ф-ия была статической, чтоб можно было вызвать Class1.getID(), но в этом случае вызов ф-ии getID:
возвратит ID для класса Class1, а не Class2, что не хорошо. Как лучше решить данную проблему? PS: Class1 можно делать вообще абстрактным, или интерфейсом Это сообщение отредактировал(а) 3,14 - 20.12.2005, 15:06 -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Полиморфизм возможен только для не статических функций. Твоя функция очень, сильно напоминает стандартную getClass(), пусть она возвращает некий статический ID определенный в самом классе. А статической функцией это не реализовать, т.п. статическая функция не знает для какого объекта она была вызвана и значит не знает его реального класса. Кстати вызовы статических методов от переменных порождают предупреждения компилятора, т.к. это плохой тон. -------------------- 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. |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
А если через someVar.getClass().getField().getInt() ?
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Замени тип Class1 соответствующим интерфейсом с функцией getID().
-------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
| 3,14 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 6 Всего: 24 |
Почему не работает через статические ф-ии я знаю, но не думаю что создавать обьект класса для того что получить ID класса это хороший тон.
Думал на этот счёт, но по-моему не очень хорошее решение, хотя надо будет попробовать Думаю что проблемма возникнет с наследованием от классов Class2 и Class3 Добавлено @ 15:09
Тогда чтоб вызвать ф-ию getID нам нужно будет иметь объект класса, что ИМХО не хорошо Это сообщение отредактировал(а) 3,14 - 20.12.2005, 15:14 -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
||||||||
|
|||||||||
| pvo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 7.10.2005 Где: Мск Репутация: 2 Всего: 7 |
А почему бы не сделать мапу, в которой хранить пары - Class-ID?
А у нее сделать статичный метод getID( Class clazz )? Это сообщение отредактировал(а) pvo - 20.12.2005, 15:20 |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Если у тебя есть класс, то что мешает тебе получить его ID? Создай некую статическую HashMap в которую положи Ключ-Класс(или имя класса)/Значение-ID. Тот пример который ты написал описывает другой случай, когда есть объект достыпный по базовой ссылке, но надо получить его реальный ID класса. P.S. Господа не используйте рефлексию, это крайне ненадежно (никаких проверок во время компиляции) и очень медленно:
-------------------- 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. |
||||
|
|||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 6 Всего: 24 |
У Object-а getClass тоже не статический, так что вроде смысла не имеет -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А конструкция Class1.class?
-------------------- 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. |
|||
|
||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 6 Всего: 24 |
Не знал что так можно, тогда вар-т c HashMap подходит -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| Гость_serge |
|
|||
|
Unregistered |
|
|||
|
||||
![]()
|
| Правила форума "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. |