Изменения
Generics
,→Проблемы реализации 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);
}
}
----
== Источники ==