Стирание типов (type erasure)
Стирание типов (type erasure) — главное, что нужно понимать про дженерики. Они существуют только на этапе компиляции: компилятор проверяет типы, а потом стирает их. В байт-коде <String> исчезает — остаётся просто List (с Object или границей внутри).
Следствия стирания (частые вопросы на собесе):
- нельзя
new T()— в рантайме типTуже неизвестен; - нельзя
obj instanceof List<String>—<String>стёрт, проверить нечего; - нельзя создать массив дженериков
new T[].
Под капотом
Зачем так сделали? Ради обратной совместимости: дженерики добавили в Java 5, и старый код без них должен был продолжать работать. Стирание позволило не ломать существующие программы.
🎤 Закрыл тему, если можешь объяснить:
• что такое стирание типов и что из-за него нельзя делать;
• зачем дженерики вообще сделали через стирание (если дошёл до 2-го слоя).
• зачем дженерики вообще сделали через стирание (если дошёл до 2-го слоя).