0Pricing
Kotlin Academy · Урок

Рефлексия Kotlin: KClass, KFunction, KProperty

Изучайте метаданные классов с помощью KClass и проверяйте их элементы посредством рефлексии.

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

Что такое рефлексия

Рефлексия позволяет коду во время выполнения исследовать и вызывать собственную структуру: классы, функции, свойства, аннотации и конструкторы. Kotlin оборачивает API рефлексии JVM в собственные более богатые типы пакета kotlin.reflect.

Получение KClass

Используйте ::class для типа или экземпляра, чтобы получить ссылку KClass:

val klass: KClass<String> = String::class
val instance: KClass<out Any> = "hello"::class
println(klass.simpleName)  // "String"

Свойства KClass

KClass предоставляет метаданные о классе:

val klass = String::class
println(klass.simpleName)        // "String"
println(klass.qualifiedName)     // "kotlin.String"
println(klass.isAbstract)        // false
println(klass.constructors.size) // number of constructors

KFunction: ссылки на вызываемые элементы

Используйте ::functionName, чтобы получить ссылку KFunction. Вы можете исследовать её параметры и вызвать её:

fun greet(name: String) = "Hello, $name!"

val fn: KFunction<String> = ::greet
println(fn.name)           // "greet"
println(fn.call("Kotlin")) // "Hello, Kotlin!"

Исследование параметров

KFunction.parameters возвращает список объектов KParameter с именем, типом и признаком необязательности:

fun add(a: Int, b: Int) = a + b

::add.parameters.forEach {
    println("${it.name}: ${it.type}")
}
// a: kotlin.Int
// b: kotlin.Int

KProperty: ссылки на свойства

Ссылки на свойства представляют свойство как самостоятельный объект. KProperty0 используется для свойств без получателя, а KProperty1 — для свойств-членов.

data class User(val name: String, val age: Int)

val prop: KProperty1<User, String> = User::name
val user = User("Alice", 30)
println(prop.get(user))  // "Alice"

Изменяемые свойства с помощью KMutableProperty

Для свойств var ссылка имеет тип KMutableProperty1, который также содержит функцию set:

class Box(var value: Int)

val prop: KMutableProperty1<Box, Int> = Box::value
val box = Box(10)
prop.set(box, 42)
println(box.value)  // 42

Перечисление всех членов

KClass.members возвращает все видимые члены (функции и свойства). KClass.declaredMemberProperties возвращает только свойства, объявленные в этом классе.

data class Point(val x: Int, val y: Int)

Point::class.declaredMemberProperties.forEach {
    println(it.name)  // "x", "y"
}

Создание экземпляров с помощью KClass

Вызовите KClass.createInstance() (требуется конструктор без аргументов) или используйте KClass.constructors для полного контроля:

class Counter {
    var count = 0
}
val c = Counter::class.createInstance()
c.count = 5
println(c.count)  // 5

Зависимость для рефлексии Kotlin

Для рефлексии Kotlin требуется артефакт kotlin-reflect (он не входит в стандартную библиотеку). Добавьте его в сборку:

// build.gradle.kts
implementation("org.jetbrains.kotlin:kotlin-reflect")

Примечание о производительности

Рефлексия значительно медленнее прямого кода. Кэшируйте ссылки KClass, KFunction и KProperty при запуске. Не вызывайте их в горячих циклах. Для большинства инструментов и кода инфраструктуры эти затраты приемлемы.

Быстрая проверка

Какой тип Kotlin представляет ссылку на свойство-член и позволяет прочитать его значение из экземпляра?

Повторение: рефлексия Kotlin

Основные типы:

  • KClass — метаданные класса, конструкторы и члены
  • KFunction — ссылки на вызываемые элементы, параметры и вызов
  • KProperty1 / KMutableProperty1 — ссылки на свойства, получение и установка значения
  • Требуется kotlin-reflect в пути к классам
  • Кэшируйте ссылки и избегайте их использования на горячих путях

Часто задаваемые вопросы

Урок «Рефлексия Kotlin: KClass, KFunction, KProperty» бесплатный?

Да — полный текст урока «Рефлексия Kotlin: KClass, KFunction, KProperty» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «Рефлексия Kotlin: KClass, KFunction, KProperty»?

Изучайте метаданные классов с помощью KClass и проверяйте их элементы посредством рефлексии. Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Рефлексия Kotlin: KClass, KFunction, KProperty»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Рефлексия Kotlin: KClass, KFunction, KProperty
  2. Создание и применение пользовательских аннотаций
  3. Чтение аннотаций во время выполнения
  4. Валидация и отображение на основе рефлексии
← Назад к Kotlin Academy