Ответ
reified обязателен при работе с дженериками в inline-функциях, когда нужно получить доступ к реальному типу T во время выполнения. Без reified информация о типе стирается из-за JVM-стирания типов.
Пример:
inline fun <reified T> parseJson(json: String): T {
return Gson().fromJson(json, T::class.java)
}
// Использование
val user = parseJson<User>(jsonString) // T сохраняется как User
Без reified нельзя получить T::class.java, так как T становится Object после компиляции. reified сохраняет тип, но требует inline, так как код подставляется в месте вызова.