Что такое Reflection API в Java?

«Что такое Reflection API в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Reflection API — это набор классов в Java (java.lang.reflect и java.lang.Class), который позволяет программе анализировать и модифицировать свое собственное поведение во время выполнения (runtime).

Основные возможности:

  • Интроспекция: получение информации о классе, его полях, методах, конструкторах, аннотациях.
  • Манипуляция: создание экземпляров классов, вызов методов, получение и установка значений полей, в том числе private.

Пример анализа класса:

Class<?> stringClass = String.class;

// Получаем все объявленные методы
Method[] methods = stringClass.getDeclaredMethods();
for (Method m : methods) {
    System.out.println(m.getName());
}

// Динамически создаем экземпляр и вызываем метод
Constructor<?> constructor = stringClass.getConstructor(String.class);
Object strInstance = constructor.newInstance("Hello");
Method lengthMethod = stringClass.getMethod("length");
int len = (int) lengthMethod.invoke(strInstance); // len = 5

Типичные случаи использования:

  • Фреймворки (Spring для DI, Hibernate для ORM).
  • Инструменты тестирования (JUnit, Mockito).
  • Сериализация/десериализация.
  • Интегрированные среды разработки (IDE).

Недостатки и риски:

  1. Производительность: операции через Reflection значительно медленнее прямых вызовов.
  2. Безопасность: обход инкапсуляции может нарушить целостность объекта.
  3. Сложность поддержки: код с Reflection менее читаем и подвержен ошибкам времени выполнения.
  4. Ограничения модульной системы (JPMS): требуются дополнительные разрешения.