Изменения

Перейти к: навигация, поиск

Generics

1308 байт добавлено, 04:59, 4 октября 2013
Проблемы реализации Generics
addAll(new Object[10], new ArrayList<String>()); // '''Ошибка'''
----
 
* Решение 4 – '''Bounded type argument'''
Реализуем метод копирование из одной коллекции в другую
 
* '''Проблема'''
<M> void addAll(Collection<M> c, Collection<M> c2) {
for (Iterator<M> i = c.iterator(); i.hasNext(); ) {
M o = i.next();
c2.add(o);
}
}
 
addAll(new AL<Integer>(), new AL<Integer>());
addAll(new AL<Integer>(), new AL<Object>()); //Ошибка
 
Проблема в том что две Коллекции могут быть разных типов, а это приводит к несовместимость generic-типов. Для таких случаев было придуман Bounded type argument. Он нужен если метод ,который мы пишем использовал бы определенный тип данных. Для этого нужно ввести <N extends M> (N принимает ток значения M).
Также можно корекнно писать <T extends A & B & C>. (Принимает значения нескольких переменных)
 
* '''Решение'''
 
<M, N extends M> void addAll(Collection<N> c, Collection<M> c2) {
for (Iterator<N> i = c.iterator(); i.hasNext(); ) {
N o = i.next();
c2.add(o);
}
}
 
----
== Источники ==
Анонимный участник

Навигация