Дженерики в Java


Обобщения — это средство универсального программирования , которое было добавлено к языку программирования Java в 2004 году в версии J2SE 5.0. Они были разработаны для расширения системы типов Java, чтобы позволить «типу или методу работать с объектами различных типов, обеспечивая при этом безопасность типов во время компиляции». [1] Безопасность типа аспекта времени компиляции не была полностью достигнута, поскольку в 2016 году было показано, что она не гарантируется во всех случаях. [2]

Платформа коллекций Java поддерживает универсальные шаблоны для указания типа объектов, хранящихся в экземпляре коллекции.

В 1998 году Гилад Брача , Мартин Одерски , Дэвид Стаутамир и Филип Уодлер создали Generic Java, расширение языка Java для поддержки универсальных типов. [3] Generic Java был включен в Java с добавлением подстановочных знаков.

Следующий блок кода Java иллюстрирует проблему, которая возникает, когда не используются дженерики. Во- первых, он объявляет ArrayListтип Object. Затем он добавляет в Stringфайл ArrayList. Наконец, он пытается извлечь добавленное Stringи привести его к Integerошибке в логике, поскольку обычно невозможно привести произвольную строку к целому числу.

Хотя код скомпилирован без ошибок, он вызывает исключение времени выполнения ( java.lang.ClassCastException) при выполнении третьей строки кода. Этот тип логической ошибки может быть обнаружен во время компиляции с помощью шаблонов и является основной причиной их использования.

Параметр типа Stringв угловых скобках объявляет ArrayList, что состоит из String(потомка ArrayListобщих Objectсоставляющих ). С дженериками больше нет необходимости приводить третью строку к какому-либо конкретному типу, потому что результат v.get(0)определяется Stringкодом, сгенерированным компилятором.