Встречается на собеседованиях • сегодня

Как изменить значение приватной переменной объекта без сеттеров

В Java можно изменить приватную переменную через рефлексию, обойдя инкапсуляцию. Пример:

java
import java.lang.reflect.Field;

class MyClass {
    private String secret = "original";
}

public class Main {
    public static void main(String[] args) throws Exception {
        MyClass obj = new MyClass();
        
        Field field = MyClass.class.getDeclaredField("secret");
        field.setAccessible(true); // снимаем проверку доступа
        field.set(obj, "hacked"); // изменяем значение
        
        System.out.println(field.get(obj)); // выведет "hacked"
    }
}

Важные моменты:

  1. Нужно использовать setAccessible(true) для обхода проверки доступа
  2. Может выбросить NoSuchFieldException если поле не найдено
  3. Не работает при наличии SecurityManager с ограничениями
  4. Нарушает принципы инкапсуляции, использовать только в крайних случаях
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы