Generics позволяют создавать параметризованные классы, интерфейсы и методы.
Основные возможности:
ClassCastException.Примеры:
List<T> может хранить элементы любого типа T.static <T> T getFirst(List<T> list) может возвращать первый элемент из списка любого типа.Ограничения Generics:
new T().List<int> - неверно, нужно List<Integer>).T[] array = new T[10] - неверно, нужно использовать ArrayList или приведение типов).Wildcards и Bounded Type Parameters:
<?>: Неизвестный тип. Позволяет читать элементы, но не писать.<? extends T>: Ограничение сверху. Позволяет работать с типами, которые являются подтипами T. Можно читать элементы типа T или его супертипов, но не писать (кроме null).<? super T>: Ограничение снизу. Позволяет работать с типами, которые являются супертипами T. Можно писать элементы типа T или его подтипов, но читать только элементы типа Object.Пример:
java