0Pricing
Kotlin Academy · Урок

Параметры типов reified: доступ к T во время выполнения

Используйте reified с inline-функциями для проверки типов и приведений во время выполнения.

«Параметры типов reified: доступ к T во время выполнения» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Проблема стирания типов

Kotlin/JVM стирает информацию о обобщённых типах во время выполнения. Внутри обобщённой функции fun foo() нельзя написать 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 — локальная установка не требуется.

Все уроки этого курса

  1. inline-функции: устранение накладных расходов лямбд
  2. Модификаторы noinline и crossinline
  3. Параметры типов reified: доступ к T во время выполнения
  4. Практические шаблоны reified: разбор, DI и сериализация
← Назад к Kotlin Academy