Что такое обобщения?

По сути дела, обобщения — это параметризованные типы. Параметризованные типы важны, поскольку позволяют объявлять классы, интерфейсы и методы, где тип данных, которыми они оперируют, указан в виде параметра. Используя обобщения, можно создать единственный класс, например, который будет автоматически работать с разными типами данных. Классы, интерфейсы или методы, имеющие дело с параметризованными типами, называются обобщениями, обобщенными классами или обобщенными методами.

Важно понимать, что Java всегда предлагала возможность создавать в определенной мере обобщенные классы, интерфейсы и методы, оперирующие ссылками на тип Object. Поскольку Object — это суперкласс для всех остальных классов, ссылка на Object может обращаться к объекту любого типа. То есть в старом коде обобщенные классы, интерфейсы и методы использовали ссылки на Object для того, чтобы оперировать объектами различного типа. Проблема была в том, что они не могли обеспечить безопасность типов.

Обобщения добавили в язык безопасность типов, которой так не хватало. Они также упростили процесс, поскольку теперь нет необходимости применять явные приведения для транслирования объектов Object в реальные типы данных, с которыми выполняются действия. Благодаря обобщениям, все приведения выполняются автоматически и неявно. То есть обобщения расширили ваши возможности повторного использования кода и позволили вам делать это легко и безопасно.

На заметку! Предупреждение для программистов С++: хотя обобщения похожи на шаблоны в С++, это не одно и то же. Существует ряд фундаментальных отличий между двумя подходами к обобщенным типам. Если у вас имеется опыт применения С++, важно не делать поспешных выводов о том, как обобщения работают в Java.