воскресенье, 26 марта 2017 г.

OCJP - Genercis and collections


Это крупный и очень насыщенный подводными камнями раздел. Здесь нужно не только понимать как работают коллекции и дженерики, но и знать многие нюансы используемых классов и интерфейсов.

О банальных вещах писать не буду. Я полагаю нет проблем знать отличия LinkedList, ArrayList, List, Set, HashSet, Map, HashMap и как эти классы и интерфейсы применять и использовать. И как объявлять простые генерализированные структуры из них. К банальным вещам относится diamond оператор <> и приведение типов элементов негенерализированных коллекций.

Начнем с дженериков.

Генерализированные коллекции могут работать с коллекциями не генерализированными. Это позволяется потому, что после компиляции информация о типе коллекции стирается. А вот на этапе компиляции все генерализированные коллекции считаются как будто новыми классами.

Дженерики вообще не сложные, до тех пор пока не появляются следующие слова:

?, super, extend


Главное правило такое:
если коллекция передается для того, чтобы добавить данные, то надо использовать super. Тогда можно добавлять в коллекцию элементы наследников выбранного класса. Если коллекция передается в метод, чтобы извлечь данные, тогда надо использовать слово extend. В таком случае можно доставать элементы выбранного класса.

Модификация - super
Извлечение - extend

С дженериками все остальное довольно прозрачно и понятно.

Коллекции



Комментариев нет:

Отправить комментарий