Sto provando a scrivere un metodo che otterrà un campo privato in una classe utilizzando la riflessione.Accesso alle variabili private in Java tramite la riflessione
Ecco la mia classe (semplificata per questo esempio):
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);
}
}
così dicono faccio questo:
SomeClass c = new SomeClass();
Object val = SomeClass.getInstanceField(c, "myField");
Ricevo un IllegalAccessException
perché myField
è privato. C'è un modo per ottenere/impostare variabili private usando la riflessione? (L'ho fatto in C#, ma questa è la prima volta che l'ho provato in Java). Se ti stai chiedendo perché c'è bisogno di fare una tale pazzia :), è perché a volte durante i test unitari è utile impostare variabili private su valori falsi per test di errore, ecc.
tenere a mente che questo non funziona se non c'è PermissionManager – Bozho
Questo può migliorare le prestazioni marginalmente, anche se il socio è altrimenti accessibile (a quanto pare i controlli off) –
+1 questo solo mi ha salvato un po ' frustrazione :) –