Параметры типов reified: доступ к T во время выполнения
Используйте reified с inline-функциями для проверки типов и приведений во время выполнения.
«Параметры типов reified: доступ к T во время выполнения» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.
Проблема стирания типов
Kotlin/JVM стирает информацию о обобщённых типах во время выполнения. Внутри обобщённой функции fun нельзя написать T::class или is T — после компиляции JVM не знает, чем является T.
reified приходит на помощь
Объедините inline с reified для параметра типа. Поскольку функция встраивается, компилятор подставляет фактический тип в каждом месте вызова, делая T полностью доступным во время выполнения.
inline fun <reified T> isInstance(value: Any): Boolean = value is T
val result = isInstance<String>("hello") // trueПроверка типа с помощью is T
Без reified выражение is T вызывает ошибку компиляции («Невозможно проверить экземпляр стёртого типа»). При наличии этого модификатора компилятор переписывает проверку, используя конкретный тип, заданный в месте вызова.
inline fun <reified T> filterByType(list: List<Any>): List<T> =
list.filterIsInstance<T>()Получение KClass из T
Вы можете получить KClass параметра типа с помощью T::class. Это позволяет выполнять проверки типов без рефлексии и передавать ссылки на классы в API.
inline fun <reified T> className(): String = T::class.simpleName ?: "Unknown"
println(className<Int>()) // "Int"Разбор с рефицированными типами
Распространённый шаблон — типобезопасная вспомогательная функция parseJson, которая автоматически получает целевой класс:
inline fun <reified T> parseJson(json: String): T =
jacksonObjectMapper().readValue(json, T::class.java)Шаблон ViewModel / локатора служб
Контейнеры внедрения зависимостей часто используют reified, чтобы возвращать правильный экземпляр без необходимости передавать аргумент Class:
inline fun <reified T : ViewModel> Fragment.viewModel(): T =
ViewModelProvider(this)[T::class.java]Вызов API Java с помощью Class<T>
Многие API Java требуют аргумент Class. reified позволяет вызывать их, не заставляя вызывающий код явно передавать класс:
inline fun <reified T> Gson.fromJson(json: String): T =
fromJson(json, T::class.java)Рефицированные параметры типов и ограничения типов
Вы можете сочетать reified с верхними границами типов:
inline fun <reified T : Any> create(): T =
T::class.java.getDeclaredConstructor().newInstance()Ограничения
Рефицированные параметры типов работают только во inline-функциях — но не в классах, интерфейсах или функциях без inline. Нельзя вызвать функцию с reified, передав неизвестный тип, известный только во время выполнения.
Как компилятор реализует этот механизм
В каждом месте вызова компилятор заменяет T фактическим аргументом типа. Байткод в месте вызова содержит прямые ссылки на конкретный класс — рефлексия не требуется.
Примеры из стандартной библиотеки
Функции стандартной библиотеки, использующие reified: filterIsInstance, emptyArray, arrayOf, typeOf. Они работают именно потому, что являются функциями inline + reified.
Быстрая проверка
Почему для использования reified функция должна быть inline?
Итоги: рефицированные параметры типов
Основные выводы:
reifiedделает параметр типа доступным во время выполнения, обходя стирание типов- Функция должна быть
inline - Внутри функции становятся доступны
is T,T::class,T::class.java - Это обеспечивает типобезопасный разбор JSON, вспомогательные функции DI и API со ссылками на классы
Часто задаваемые вопросы
Урок «Параметры типов reified: доступ к T во время выполнения» бесплатный?
Да — полный текст урока «Параметры типов reified: доступ к T во время выполнения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.
Чему я научусь в уроке «Параметры типов reified: доступ к T во время выполнения»?
Используйте reified с inline-функциями для проверки типов и приведений во время выполнения. Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Academy?
Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Параметры типов reified: доступ к T во время выполнения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Academy?
Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- inline-функции: устранение накладных расходов лямбд
- Модификаторы noinline и crossinline
- Параметры типов reified: доступ к T во время выполнения
- Практические шаблоны reified: разбор, DI и сериализация