reflect - reflexion java example
Accediendo a variables privadas en Java a través de la reflexión (1)
Esta pregunta ya tiene una respuesta aquí:
Intento escribir un método que obtenga un campo privado en una clase utilizando la reflexión.
Aquí está mi clase (simplificada para este ejemplo):
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);
}
}
Entonces di que hago esto
SomeClass c = new SomeClass();
Object val = SomeClass.getInstanceField(c, "myField");
IllegalAccessException
una IllegalAccessException
porque myField
es privado. ¿Hay alguna forma de obtener / establecer variables privadas usando la reflexión? (Lo hice en C #, pero esta es la primera vez que lo intento en Java). Si se está preguntando por qué existe la necesidad de hacer tal locura :), es porque a veces, durante las pruebas unitarias, es útil establecer variables privadas en valores falsos para pruebas de fallas, etc.
Lo averigué. Necesitar
field.setAccessible(true);