![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 4 Всего: 11 |
Хочу написать абстрактный класс "Метод", который бы реагировал на определённый тип вызова, класс Call. Сваленные в кучу методы можно было бы просматривать, проверять, какой тип вызова данный метод получает -- и вызывать для него run.
Но не даёт.
В первом случае ругается на то, что конструктор типа Class является приватным. Во втором случае ругается на то, что нельзя select from a type variable. Почему это всё запрещено? |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Ну, естественно. Чтобы выдать класс нужен объект этого класса.
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 4 Всего: 11 |
||||
|
||||
| ivg |
|
||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
А вы почитайте про generics в Java.
Всё правильно. Объект типа Class, для каждого конкретного класса не должен существовать в нескольких экземплярах. Грубо говоря, такой объект имеет особый статический контекст своего существования (Сравнение с синглтоном наверно будет не совсем корректно). Только JVM может создавать такие объекты. Это конечно не имеет отношения к generics, а вот во втором случае все просто. Generics в Java - это шаблоны времени компиляции. Что должен сгенерировать компилятор на эту строку:
Это станет известно, когда вы в коде подставите вместо параметра шаблона нужный тип. Но класс Method<T extends Call> должен быть скомпилирован и без этих знаний, иначе никакого толку от шаблонов нет. А точнее, в таком случае они могут существовать только в виде исходников, а не скомпилированных классов. Понимаете? |
||||
|
|||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 4 Всего: 11 |
||||
|
||||
| serger |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
1. Ну потомучто это что-то типа предпроцессора. 2. Это и сделано для контроля типов в момент компиляции. 3. Ну и почитайте всё-таки "generics". -------------------- упс! |
||||
|
|||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 4 Всего: 11 |
Вроде бы читал, но для меня это всё равно не очевидно. Можно поточнее ткнуть меня, где это написано?
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
То что ты хочешь требует создание нового класса на каждый параметризованный тип. В .NET именно так и происходит, в Java выбрали другой путь. Т.е. генрики всего лишь берут на себя проверку типов во время компиляции, и все. -------------------- 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. |
|||
|
||||
![]()
|
| Правила форума "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. |