Что такое стирание типов

«Что такое стирание типов» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стирание типов (type erasure) — это процесс, при котором информация о generic-типах удаляется во время компиляции. В runtime JVM видит только сырые типы (raw types), что может привести к ограничениям.

Пример:

val list1: List<String> = listOf("a", "b")
val list2: List<Int> = listOf(1, 2)
// В runtime оба списка будут просто List без информации о типах

Последствия:

  • Невозможно проверить generic-тип в runtime (if (list is List<String>) — ошибка)
  • Приводит к unchecked cast warnings
  • Для обхода используют reified-параметры в inline-функциях

Решение для проверки типов:

inline fun <reified T> checkType(item: Any) = item is T