Загрузка данных


Практика 12. Рефлексия в Kotlin

Цель и задачи

Познакомиться с механизмом рефлексии в Kotlin, научиться исследовать структуру классов во время выполнения, различать Kotlin Reflection (KClass, KProperty, KFunction) и Java Reflection, читать пользовательские аннотации через findAnnotation, вызывать конструкторы через callBy и реализовать простой JSON-сериализатор на основе рефлексии.

Что сделано

Добавление зависимости kotlin-reflect в build.gradle.kts происходит на рисунке 1.

Создание аннотации @MiniSerializable продемонстрировано на рисунке 2.

Создание тестового data class User показано на рисунке 3.

Реализация JSON-сериализатора toJson() и десериализатора fromJson() представлена на рисунке 4.

Создание unit-тестов MiniJsonTest продемонстрировано на рисунке 5.

Результат прохождения тестов — 9 зелёных — показан на рисунке 6.

Вывод

Освоена рефлексия в Kotlin: получение KClass через ::class, перечисление свойств через declaredMemberProperties, чтение аннотаций через findAnnotation, создание объектов через primaryConstructor.callBy(), вызов геттеров через prop.getter.call(). Написан собственный JSON-сериализатор toJson() и десериализатор fromJson() — они поддерживают примитивные типы, nullable-поля, кастомные имена через аннотацию и рекурсивную сериализацию. Все 9 тестов проходят. Понято, что рефлексия — мощный, но тяжёлый инструмент: производительность ниже прямых вызовов в 10–100 раз, а обфускация R8/ProGuard может сломать код, использующий рефлексию, если не заданы keep-правила.

---

Скажи «дальше» — Практика 13.