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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нетривиальное использование Generics, надо смотреть пример иначе не объяснить 
:(
    Опции темы
Royan
Дата 19.3.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Вот мой случай
Код

class Feature {
    public Feature clone() {
        return new Feature();
    }
}

public class Test<T extends Feature> {
    Set<T> cuteSet;
    
    public synchronized List<T> getStuffByName(String name) {
        List<T> someList = new LinkedList<T>();
        
        if (cuteSet != null) {
            for (T item : cuteSet) {
                someList.add(item.clone());
            }
        }
        return someList;
    }
}


Объясните, пожалуйста, почему в строке 15 возникает ошибка? Ведь тип T уже ясно определен как подтип класса Feature, откуда ругань?


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
v2v
Дата 19.3.2008, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



clone() возвращает экземпляр класса Feature, а тебе надо Т : сделай приведение типов.
Код

someList.add((Т)item.clone());



--------------------
PM   Вверх
Shaggie
Дата 19.3.2008, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

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



Цитата(v2v @  19.3.2008,  13:38 Найти цитируемый пост)
сделай приведение типов.

И компилятор ругаентся на unchecked cast. Странно, что конструкция <T extends Feature> никак не влияет на принимаемые им решения.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
v2v
Дата 19.3.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Цитата(Shaggie @  19.3.2008,  14:06 Найти цитируемый пост)
И компилятор ругаентся на unchecked cast.

не ругнётся, а просто предупредит.
ситуация ведь тривиальная ;)

Код

class A1{}
class A2 extends A1{}

//
A1 a1 = new A1();
A2 a2 = a1; // <- error here




--------------------
PM   Вверх
Royan
Дата 19.3.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



v2v, Прав, спасибо!


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
w1nd
Дата 20.3.2008, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Shaggie @  19.3.2008,  14:06 Найти цитируемый пост)
Странно, что конструкция <T extends Feature> никак не влияет на принимаемые им решения.

В принципе, ничего странного. <T extends Feature> - это не обязательно Feature. Если вместо T подставить наследника Feature, нехорошо получится. Зато вот так всё будет компилироваться без ошибок и предупреждений:

Код
interface CloneableFeature<T extends CloneableFeature<T>> {
    T clone();
}

class Feature implements CloneableFeature<Feature> {
    public Feature clone() {
        return new Feature();
    }
}

class Test<T extends CloneableFeature<T>> {
    Set<T> cuteSet;
    
    public synchronized List<T> getStuffByName(String name) {
        List<T> someList = new LinkedList<T>();
        
        if (cuteSet != null) {
            for (T item : cuteSet) {
                someList.add(item.clone());
            }
        }
        return someList;
    }

}




Это сообщение отредактировал(а) w1nd - 20.3.2008, 02:45


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


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

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



v2v, w1nd, спасибо!  smile 


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
Platon
Дата 20.3.2008, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 16
Всего: 40



Цитата(w1nd @  20.3.2008,  03:43 Найти цитируемый пост)
interface CloneableFeature<T extends CloneableFeature<T>>

 smile 
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.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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