Основы рефлексии
Изучайте типы во время выполнения
«Основы рефлексии» — бесплатный урок 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 — локальная установка не требуется.