Почему inline используется с refied

«Почему inline используется с refied» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Inline-функции в Kotlin позволяют избежать накладных расходов на вызов функций, подставляя их код напрямую в место вызова. Однако, с generics возникает проблема: информация о типе стирается во время выполнения (type erasure).

Reified (материализованные) типы решают эту проблему, сохраняя информацию о типе во время выполнения. Но они работают только с inline-функциями, потому что:

  1. Inline-функции компилируются в вызывающий код, поэтому тип можно определить статически
  2. Обычные функции не могут сохранить информацию о типе из-за type erasure

Пример:

inline fun <reified T> checkType(value: Any) {
    if (value is T) { // Проверка типа возможна благодаря reified
        println("Correct type")
    }
}