Изменения

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

Generics

1068 байт добавлено, 21:40, 1 октября 2013
Проблемы реализации Generics
// ClassCastException
Integer li = lo.get(0);
 
 
== Проблемы реализации Generics ==
* Решение 1 - '''Wildcard'''
Пусть мы захотели написать метод, который берет Collection<Object> и выводит на экран. И мы захотели вызвать dump для Integer.
 
'''Проблема'''
}
}
 
----
* Решение 2 – '''Bounded Wildcard'''
Пусть мы захотели написать метод, который рисует List<Shape>. И у Shape есть наследник Circle.
И мы хотим вызвать draw для Circle. Но у нас не получиться из-за несовместимости типов.
 
'''Проблема'''
List<Circle> l; draw(l); // '''Ошибка'''
Это решение используют, если метод который нужно реализовать использовал бы определенный тип и его подтипов. Так называемое "Ограничение сверху". В Этом примере Circle является подтипом Для этого нужно вместо <Shape> прописать <? extends Shape>.
'''Решение'''
}
}
 
----
* Решение 3 – '''Generic-Метод'''
 
Пусть вы захотели сделать метод, который берет массив Object и переносить их в коллекцию.
'''Проблема'''
addAll(new String[10], new ArrayList<Object>()); // '''Ошибка'''
Напомним, что вы не можете просто засунуть Object в коллекции неизвестного типа. Способ решения этой проблемы является использование "Generic-Метод" Для этого перед методом нужно объявить <T> и использовать его. '''Решение'''
<T> void addAll(T[] a, Collection<T> c) {
for (int i = 0; i < a.length; i++) {
Анонимный участник

Навигация