На JVM параметры типа стираются в runtime: нельзя if (list is List<String>) напрямую, нельзя T::class без reified.
Разбор
- Проверки через
reified или Class-токены.
- Unchecked cast warnings.
- Одинаковый runtime тип у
List<String> и List<Int>.
- Аннотации
@JvmSuppressWildcards на границе Java.
Итог
Erasure — причина многих generic-ограничений Kotlin/Java.