0Pricing
Kotlin Academy · Урок

Основы рефлексии

Изучайте типы во время выполнения

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

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

Рефлексия — это способность программы во время выполнения изучать и изменять собственную структуру: классы, свойства, функции и аннотации.

Рефлексия Kotlin находится в пакете kotlin.reflect и сосредоточена вокруг KClass.

Получение KClass

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

class Robot

fun main() {
    val fromType = Robot::class
    val fromInstance = Robot()::class
    println(fromType.simpleName)
    println(fromInstance.simpleName)
}

Имена класса

KClass предоставляет simpleName и qualifiedName. Полное имя включает путь к пакету.

class Engine

fun main() {
    val k = Engine::class
    println(k.simpleName)
    println(k.qualifiedName)
}

Изучение свойств

memberProperties перечисляет свойства класса. Каждое из них является объектом KProperty, у которого можно запросить name.

import kotlin.reflect.full.memberProperties

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

fun main() {
    for (p in Point::class.memberProperties) {
        println(p.name)
    }
}

Чтение значений свойств

Объект KProperty1 можно вызвать с экземпляром, чтобы прочитать его значение через get(instance).

import kotlin.reflect.full.memberProperties

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

fun main() {
    val p = Point(3, 4)
    for (prop in Point::class.memberProperties) {
        println(prop.name + " = " + prop.get(p))
    }
}

Изучение функций

memberFunctions возвращает вызываемые функции класса в виде объектов KFunction. Вы можете прочитать name каждой функции.

import kotlin.reflect.full.memberFunctions

class Calculator {
    fun add(a: Int, b: Int) = a + b
    fun negate(a: Int) = -a
}

fun main() {
    Calculator::class.memberFunctions
        .filter { it.name in listOf("add", "negate") }
        .forEach { println(it.name) }
}

Ссылки на функции

Синтаксис ::name создаёт вызываемую ссылку типа KFunction. Позже её можно вызвать с помощью invoke или передать дальше.

fun double(n: Int) = n * 2

fun main() {
    val ref = ::double
    println(ref.name)
    println(ref.invoke(21))
}

Создание экземпляров

createInstance() создаёт объект с помощью рефлексии, если у класса есть конструктор без аргументов.

import kotlin.reflect.full.createInstance

class Widget {
    override fun toString() = "Widget"
}

fun main() {
    val w = Widget::class.createInstance()
    println(w)
}

Изучение конструкторов

constructors перечисляет конструкторы класса. Вы можете изучить их parameters, чтобы узнать, какие аргументы они ожидают.

class Person(val name: String, val age: Int)

fun main() {
    val ctor = Person::class.constructors.first()
    ctor.parameters.forEach { println(it.name) }
}

Затраты и ограничения

Рефлексия обладает большими возможностями, но:

  • Работает медленнее прямых вызовов
  • Обходит проверку безопасности во время компиляции
  • Требует библиотеку kotlin-reflect в JVM

Используйте её для платформ и инструментов, а не в часто выполняемых циклах.

Инструментарий рефлексии

Запомните основные типы:

  • KClass — класс
  • KProperty — свойство
  • KFunction — функция
  • KParameter — параметр

Вместе они позволяют динамически читать структуру.

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

Проверьте, насколько хорошо Вы поняли основы рефлексии.

Итоги

Вы изучили основы рефлексии:

  • Получение KClass с помощью ::class
  • Перечисление memberProperties и memberFunctions
  • Чтение значений свойств и вызов ссылок на функции
  • Создание объектов с помощью createInstance()

Далее: динамическое чтение аннотаций.

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

Урок «Основы рефлексии» бесплатный?

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

Чему я научусь в уроке «Основы рефлексии»?

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

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

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

Сколько времени занимает урок «Основы рефлексии»?

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

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

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

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

  1. Использование аннотаций
  2. Определение аннотаций
  3. Основы рефлексии
  4. Практическая рефлексия
← Назад к Kotlin Academy