Что такое Java Reflection

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

Ответ

Java Reflection — это механизм, позволяющий анализировать и изменять структуру классов, методов, полей и других элементов во время выполнения. Он дает доступ к метаданным классов, даже если они private, и позволяет динамически создавать объекты, вызывать методы и модифицировать поля.

Пример:

Class<?> clazz = MyClass.class;
Field field = clazz.getDeclaredField("privateField");
field.setAccessible(true); // Обход инкапсуляции
Object value = field.get(myObject); // Получение значения

Используется для:

  • Фреймворков (например, аннотации в Retrofit, Room)
  • Тестирования (доступ к private-методам)
  • Динамической загрузки классов

Минусы:

  • Нарушает инкапсуляцию
  • Медленнее прямого вызова
  • Нет проверки типов на этапе компиляции

Используйте осторожно, только когда без него не обойтись.