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