Reflection API в Kotlin, предоставляемый через библиотеку kotlin-reflect, позволяет проводить инспекцию кода во время выполнения, изучая структуры классов, свойств и функций — включая их метаданные и аннотации.
Ключевые строительные блоки Kotlin reflection:
KClass — представляет класс и его метаданныеKFunction — представляет функцию и её сигнатуруKProperty — представляет свойство и его аксессоры:: — создаёт callable references во время выполненияПример базового использования:
val kClass = MyClass::class
val properties = kClass.memberProperties
val functions = kClass.memberFunctions
Reflection особенно ценна в ситуациях, где требуется информация о типах во время выполнения:
Reflection имеет заметные недостатки:
kotlin-reflect добавляет примерно 2.5 МБ в бинарникРаспространённая стратегия оптимизации — кеширование reflection-ссылок:
val cachedProperty: KProperty1<MyClass, String> =
MyClass::class.memberProperties
.first { it.name == "name" } as KProperty1<MyClass, String>
Используй Kotlin reflection осознанно — это мощный инструмент для фреймворков и инфраструктурного кода, но его следует избегать в чувствительной к производительности логике приложения, где доступны прямой доступ или альтернативы на этапе компиляции.
Reflection — это оптимальный подход для доступа к свойствам объектов в часто выполняемых циклах, потому что он предоставляет гибкую информацию о типах во время выполнения.
Новый — ещё не проверен сообществом
Вы