Рефлексия — это механизм языка программирования, позволяющий программе получать информацию о своей структуре и поведении во время выполнения. Это включает возможность интроспекции классов, методов, полей и их атрибутов, а также возможность динамически создавать объекты, вызывать методы и получать/устанавливать значения полей, даже если имена этих элементов неизвестны на этапе компиляции.
Основные возможности рефлексии в Java:
Class объекта: Представляет собой описание класса или интерфейса. Получается через Object.getClass(), .class синтаксис или Class.forName().getFields(), getDeclaredFields(): Получение информации о полях.getMethods(), getDeclaredMethods(): Получение информации о методах.getConstructors(), getDeclaredConstructors(): Получение информации о конструкторах.Class.newInstance() (устарел) или Constructor.newInstance().Method.invoke().Field.get() и Field.set().getAnnotations().Плюсы рефлексии:
Минусы рефлексии:
ClassNotFoundException, NoSuchMethodException), обнаруживаются только во время выполнения, а не на этапе компиляции.Пример использования ( получение и вызов приватного метода):
java
В Android-разработке рефлексия часто используется фреймворками (например, Dagger, Gson, Room) для инъекции зависимостей, сериализации/десериализации и генерации кода. Разработчику следует использовать рефлексию с осторожностью из-за ее минусов, предпочитая компиляционные решения, когда это возможно (например, аннотационные процессоры).