Карта / Generics (дженерики) / Стирание типов (type erasure)

Стирание типов (type erasure)

Стирание типов (type erasure) — главное, что нужно понимать про дженерики. Они существуют только на этапе компиляции: компилятор проверяет типы, а потом стирает их. В байт-коде <String> исчезает — остаётся просто ListObject или границей внутри).

на компиляции List<String> проверка типов работает стирание в рантайме List

Следствия стирания (частые вопросы на собесе):

  • нельзя new T() — в рантайме тип T уже неизвестен;
  • нельзя obj instanceof List<String><String> стёрт, проверить нечего;
  • нельзя создать массив дженериков new T[].
Под капотом

Зачем так сделали? Ради обратной совместимости: дженерики добавили в Java 5, и старый код без них должен был продолжать работать. Стирание позволило не ломать существующие программы.

🎤 Закрыл тему, если можешь объяснить:
• что такое стирание типов и что из-за него нельзя делать;
• зачем дженерики вообще сделали через стирание (если дошёл до 2-го слоя).