Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятки с generic'ами 
:(
    Опции темы
w1nd
Дата 21.12.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Пример - 
Код
public class Test {
    public static class A {}
    public static class B extends A {}
    public static class C<T extends A> {
        public void test(T t) {
        }
    }
    public static class D extends C<B> {}
    public static class E {
        public C<? extends A> createC() {
            return new D();
        }
    }
    public void test() {
        A a = new A();
        B b = new B();
        E e = new E();  
        
        C<? extends A> c = e.createC();
        
        c.test(a);
        c.test(b);
    }
}

 - не компилируется. Кто-нить может пояснить, почему, и как это можно объехать?


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
powerOn
Дата 21.12.2006, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Попробуй так:
Код

C c = e.createC();





--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
w1nd
Дата 21.12.2006, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(powerOn @ 21.12.2006,  12:18)
Попробуй так:

Код

C c = e.createC();

Ну, против этого лома, конечно, приёма нет smile Но хотелось бы понять, где зарыли собачий трупик... 


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
NotGonnaGetUs
Дата 21.12.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 25.2.2005
Где: Москва

Репутация: 4
Всего: 12



Код

 public static class C<T extends A> {
        T tt;
        public void test(T t) {
                 tt = t;
        }
    }
...
C<? extends A> c = e.createC(); // new D extends C<B>;
c.test(a);

Как ты предлагаешь tt присвоить значение типа A 
и не получить рантайм ошибки при будущих обращениях к tt как к экземпляру класса B в классе D?

PM MAIL   Вверх
w1nd
Дата 22.12.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(NotGonnaGetUs @  21.12.2006,  17:20 Найти цитируемый пост)
Как ты предлагаешь tt присвоить значение типа A и не получить рантайм ошибки при будущих обращениях к tt как к экземпляру класса B в классе D?

Я просто не собираюсь этого делать smile Пример являет собой обезличенный кусок реального кода, я хочу избавиться от приведения параметра. Единственный смысл выноса параметризации на уровень класса в том, что такой же тип должен использоваться и в других методах.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.