Изменения

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

Generics

6 байт убрано, 19:03, 4 сентября 2022
м
rollbackEdits.php mass rollback
Это одна из самых важных вещей, которую вы должны узнать о Generics
Как говоритьсяговорится: "В бочке мёда есть ложка дегтя". Для того чтобы сохранить целостности и независимости друг от друга Коллекции, у Generics существует так называемая "Несовместимость generic-типов".
* Суть такова:
Проблема в том что эта реализация кода не эффективна, так как Collection<Object> не является полностью родительской коллекцией всех остальных коллекции, грубо говоря Collection<Object> имеет ограничения.
Для решения этой проблемы используется Wildcard ("?"). Он не имеет ограничения в использовании(то есть имеет соответствие с любым типом) и в этом его плюсы. И теперь, мы можем назвать это вызвать dump с любым типом коллекции.
* '''Решение'''
List<Circle> l; draw(l); // '''Ошибка'''
Проблема в том, что у нас не получиться получится из-за несовместимости типов.
Предложенное решение используется, если метод который нужно реализовать использовал бы определенный тип и его подтипов. Так называемое "Ограничение сверху". Для этого нужно вместо <Shape> прописать <? extends Shape>.
}
}
Но все равно после выполнение останется ошибка в третей третьей строчке :
addAll(new Object[10], new ArrayList<String>()); // '''Ошибка'''
}
Проблема в том, что метод List.set() не может работать с List<?>, так как ему не известно как какой он List. Для решение этой проблемы используют "Wildcard Capture" (или "Capture helpers"). Суть заключается в том, чтобы обмануть компилятор. Напишем еще один метод с параметризованной переменной и будем его использовать внутри нашего метода.
* '''Решение'''
while(i.hasNext()) {
Integer next = '''(Integer)''' i.next();
if (next.compareTo(resultmax) > 0) {
max = next;
}
while(i.hasNext()) {
Integer next = i.next();
if (next.compareTo(resultmax) > 0) {
max = next;
}
1632
правки

Навигация