Estoy tratando de escribir un método que obtenga un campo privado en una clase utilizando la reflexión.Accediendo a variables privadas en Java a través de la reflexión
Aquí es mi clase (simplificado 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);
}
}
Así que dicen que hago esto:
SomeClass c = new SomeClass();
Object val = SomeClass.getInstanceField(c, "myField");
Recibo un 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 pregunta por qué existe la necesidad de hacer tal locura :), es porque a veces durante la prueba unitaria es útil establecer variables privadas en valores falsos para pruebas de fallas, etc.
tener en cuenta que esto no funcionará si hay PermissionManager – Bozho
Esto puede mejorar el rendimiento marginal incluso si el miembro es accesible de otro modo (como resulta de los controles) 1 –
esto sólo me salvó alguna frustración :) –