Пример использования рефлексии
Что проверяют
Понимаете ли вы, что рефлексия это обращение к классам и их членам по имени во время выполнения, и знаете ли, чем за неё платят именно на Android. Спрашивают не ради синтаксиса: на ней построена половина популярных библиотек, и от ответа зависит, разберёте ли вы падение в релизной сборке.
Как отвечать
Дайте короткий пример и сразу цену.
Class<?> cls = Class.forName("com.example.Person");
Object person = cls.getDeclaredConstructor().newInstance();
Method greet = cls.getDeclaredMethod("greet", String.class);
greet.invoke(person, "Мир");
Field name = cls.getDeclaredField("name");
name.setAccessible(true);
String value = (String) name.get(person);Дальше про практику. В приложении рефлексию чаще всего использует не ваш код, а библиотеки: Retrofit строит реализацию интерфейса API, Gson разбирает JSON по полям класса, LayoutInflater создаёт View по имени класса из разметки. Своими руками к ней прибегают в тестах, в отладочных инструментах и при работе с чужим SDK, где нужного члена нет в публичном интерфейсе.
Плата за неё: проверка типов уходит из компиляции в рантайм, вызовы заметно медленнее прямых, объекты Method и Field приходится кэшировать. Отдельно назовите R8: он переименовывает и вырезает всё, на что нет ссылок в коде, а строка с именем класса ссылкой не считается, поэтому нужны правила keep. И скажите про доступ к скрытым API платформы: обращение к непубличным членам фреймворка система ограничивает.
Сильная концовка: сегодня рефлексию вытесняет кодогенерация. Hilt, Room, Moshi с кодогенератором и kotlinx.serialization делают ту же работу на этапе сборки, без цены в рантайме.
Где спотыкаются
Говорят, что рефлексия создаёт объект в обход конструктора. newInstance() конструктор именно вызывает, просто выбирает его по сигнатуре.
Второе: проверяют код только в отладочной сборке. В релизе с включённым R8 тот же вызов падает с NoSuchMethodException, потому что метод переименован или вырезан.
Третье: тянут kotlin-reflect ради одной строки. Библиотека ощутимо весит и разрастается в APK, а задача обычно решается обычной Java-рефлексией или inline-функцией с reified.