28 votes

Accès aux variables privées en Java via la réflexion

J'essaie d'écrire une méthode qui récupère un champ privé dans une classe en utilisant la réflexion.

Voici 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 disons que je fais ça :

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

Je reçois un IllegalAccessException parce que myField est privée. Existe-t-il un moyen d'obtenir/de définir des variables privées en utilisant la réflexion ? (Je l'ai déjà fait en C#, mais c'est la première fois que je l'essaie en Java). Si vous vous demandez pourquoi il est nécessaire de faire une telle folie :), c'est parce que parfois, pendant les tests unitaires, il est pratique de définir des variables privées à des valeurs fictives pour les tests d'échec, etc.

Merci.

33voto

dcp Points 26928

J'ai compris. Besoin de

field.setAccessible(true);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X