Ревью 6. 1 Что такое дженерики Какую проблему они решают
Скачать 13.9 Kb.
|
1) Что такое дженерики? Какую проблему они решают. Две основные причины возникновения дженериков: - типобезепасность и помогают не создавать дубликатный код. Дженерики – параметризированные типы Тайпхолдер переменная не может быть статичной. Отсутствие необходимости приведения типов. Возможность реализации общих методов для разных типов данных До появления дженериков использовались коллекции для хранения объектов любого типа. Что можно поставить в дженерики, что нельзя? Что можно типизировать? Что нельзя параметризировать? Можно типизировать только ссылочные типы, примитивы – нельзя. Невозможно объявить статическое параметризированное поле класса. Невозможно приведение или instanceof с параметризированными типами, потому что для джава машины не существует параметризации (type erassure) Даймонд оператор - <> предусмотрена возможность не дублировать дженерик, джава автоматически подставит в даймонд. Если поле типизировано дженериком, в байт коде этот тип будет представлен как Object 2) Wildcard Это знак вопроса в тайпхолдере. Знак вопроса означает, что вместо него может быть подставлен абсолютно любой класс Когда мы используем Wildcard мы не можем вызывать методы, которые изменяют объект – потому что для компилятора Wildcard это неизвестный тип. Wildcard может использоваться при создании коллекций 3) Принцип PECS Produser extends consumer super – поставщик расширяет, потребитель ограничивает. Это означает, что типы, используемые в wildcard можно ограничивать сверху и снизу по иерархии. extends T> - означает, что вместо wildcard могут быть использован класс Т и все его подклассы Super T> - означает, что вместо wildcard могут быть использован класс Т и его суперклассы 4) Параметризация статических методов. 5) Что такое коллекция. Иерархия коллекций. 6) Внутреннее устройство коллекций. БОНУС: 1. Что нельзя параметризовать? (ENUM, массив, исключения, анонимные классы) 2. Какой интерфейс, "стоит" над интерфейсом Collection? (Iterable) 3. Чем отличается метод remove() в итераторе, от такого же метода в коллекции? (Дело в многопоточности. Используя метод remove() из итератора, коллекция ограждается (бронируется) от посторонних вмешательств в эту коллекцию на время использования итератора, что аналогичный метод из коллекции сделать не может) |