Ответ
Без reified тип Generic стирается во время выполнения (type erasure), и его фактический тип становится Any? (или верхней границей, если она указана). Поэтому нельзя проверить или использовать тип напрямую в runtime.
fun <T> checkType(item: T) {
// Не скомпилируется - T неизвестен в runtime
// if (item is T) { ... }
}
Для работы с типом в runtime используйте reified с inline функциями:
inline fun <reified T> checkType(item: Any) {
if (item is T) { ... } // Теперь работает
}