J'essaye d'écrire une méthode qui va obtenir un champ privé dans une classe en utilisant la réflexion.Accéder à des variables privées en Java par réflexion
Voilà ma classe (simplifiée pour cet exemple):
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);
}
}
Alors dis-je le fais:
SomeClass c = new SomeClass();
Object val = SomeClass.getInstanceField(c, "myField");
Je reçois un IllegalAccessException
parce myField
est privé. Y at-il un moyen d'obtenir/définir des variables privées en utilisant la réflexion? (Je l'ai fait en C#, mais c'est la première fois que je l'ai essayé en Java). Si vous vous demandez pourquoi il est si nécessaire de faire une telle folie :), c'est parfois parce que, lors des tests unitaires, il est parfois utile de définir des variables privées sur des valeurs erronées pour les tests d'échecs.
garder à l'esprit que cela ne fonctionnera pas s'il y a PermissionManager – Bozho
Cela peut améliorer les performances légèrement même si le membre est par ailleurs accessible (car il fait tourner les contrôles off) –
+1 ce juste m'a sauvé quelques-uns frustration :) –