Общая реализация Java использует стирание типа
Это означает, что ваши строго типизированные универсальные коллекции на самом деле имеют тип Object во время выполнения. Это связано с некоторыми соображениями производительности, поскольку это означает, что примитивные типы должны быть упакованы при добавлении в общую коллекцию. Конечно, преимущества корректности типов во время компиляции перевешивают общую глупость стирания типов и навязчивого внимания к обратной совместимости.
Прикрепляю к посту несколько видео по теме:
Прикрепленное видео 1 - Александр Маторин — Неочевидные Дженерики
Прикрепленное видео 2 - Урок Java 310: Generics 1: Что такое дженерики
Прикрепленное видео 3 - Java. Стирание типов