Подтвердить что ты не робот

Доступ к частным переменным в Java через отражение

Я пытаюсь написать метод, который получит частное поле в классе с использованием отражения.

Здесь мой класс (упрощенный для этого примера):

public class SomeClass {
    private int myField;

    public SomeClass() {
        myField = 42;
    }

    public static Object getInstanceField(Object instance, String fieldName) throws Throwable {
        Field field = instance.getClass().getDeclaredField(fieldName);
        return field.get(instance);
    }
}

Так сказать, я делаю это:

SomeClass c = new SomeClass();
Object val = SomeClass.getInstanceField(c, "myField");

Я получаю IllegalAccessException, потому что myField является закрытым. Есть ли способ получить/установить частные переменные, используя отражение? (Я сделал это на С#, но это первый раз, когда я пробовал это на Java). Если вам интересно, почему возникает необходимость сделать такое безумие:), это потому, что иногда во время модульного тестирования это удобно для установки частных переменных на фиктивные значения для тестирования отказа и т.д.

4b9b3361

Ответ 1

Выяснил это. Необходимость

field.setAccessible(true);