Ответ
Java Reflection — это механизм, позволяющий анализировать и изменять структуру классов, методов, полей и других элементов во время выполнения. Он дает доступ к метаданным классов, даже если они private, и позволяет динамически создавать объекты, вызывать методы и модифицировать поля.
Пример:
Class<?> clazz = MyClass.class;
Field field = clazz.getDeclaredField("privateField");
field.setAccessible(true); // Обход инкапсуляции
Object value = field.get(myObject); // Получение значения
Используется для:
- Фреймворков (например, аннотации в Retrofit, Room)
- Тестирования (доступ к private-методам)
- Динамической загрузки классов
Минусы:
- Нарушает инкапсуляцию
- Медленнее прямого вызова
- Нет проверки типов на этапе компиляции
Используйте осторожно, только когда без него не обойтись.