Ответ
Стирание типов (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