В Kotlin (и Java) параметры обобщённых типов стираются во время выполнения виртуальной машиной Java. Это значит, что во время выполнения функция вроде fun <T> example() понятия не имеет, что такое T — из-за чего операции типа T::class.java невозможны в обычных функциях.
reifiedКлючевое слово reified, используемое исключительно с inline-функциями, указывает компилятору подставить реальный тип в каждое место вызова во время компиляции. Поскольку inline-функции копируют свой bytecode напрямую в код вызывающей стороны, конкретный тип всегда доступен — поэтому JVM никогда не нужно его стирать.
inline fun <reified T : Activity> Activity.startActivity() {
startActivity(Intent(this, T::class.java))
}
Без reified обращение к T::class.java вызовет ошибку компиляции. С ним компилятор заменяет T на реальный тип в каждом месте вызова, что делает полный доступ к типу во время выполнения возможным.
is-проверок типов: value is TT::classClass<T> как явный параметрreified требует, чтобы функция была inlinereified решает проблему стирания типов для inline-функций, сохраняя информацию об обобщённом типе во время компиляции — конкретный тип встраивается непосредственно в генерируемый bytecode в каждом месте вызова.
Ключевое слово reified позволяет получать доступ к параметрам обобщённых типов во время выполнения, потому что встроенные функции копируют свой байт-код прямо в код вызывающей стороны, сохраняя конкретный тип до того, как происходит стирание типов JVM.
Новый — ещё не проверен сообществом
Вы