reified?Обычно информация о дженерик-типах стирается во время выполнения на JVM — это называется type erasure. Ключевое слово reified, используется исключительно с inline-функциями, сохраняет дженерик-тип во время выполнения, позволяя тебе работать с ним напрямую.
Потому что inline-функции копируют свой байткод в место вызова, компилятор может подставить актуальный тип в этой точке, делая его доступным во время выполнения.
inline fun <reified T> isType(value: Any): Boolean = value is T
println(isType<String>("hello")) // true
println(isType<Int>("hello")) // false
Без reified, value is T вызвал бы ошибку компиляции из-за type erasure.
is T для проверки типа объекта во время выполненияT::class или T::class.java без необходимости передавать это как параметрClass<T>Типичный кейс — упрощение Android startActivity:
inline fun <reified T : Activity> Context.startActivity() {
startActivity(Intent(this, T::class.java))
}
// Использование
startActivity<ProfileActivity>()
reified требует, чтобы функция была inlineКлючевое слово reified закрывает разрыв между системой дженерик-типов Kotlin и type erasure на JVM, позволяя работать с типами во время выполнения там, где это иначе было бы невозможно или требовало бы громоздких обходных путей вроде явной передачи Class<T>.
Ключевое слово reified можно использовать как с inline функциями, так и с обычными функциями, если обобщённый тип явно передаётся в качестве параметра.
Новый — ещё не проверен сообществом
Вы