Je n'ai eu d'autre choix que d'accéder à un ensemble de classes, que je ne peux pas modifier, avec cette structure par réflexion. Toutefois, l'utilisation de la méthode indiquée dans la méthode principale ci-dessous renvoie une exception NullPointerException. Le pointeur null étant "table" dans le constructeur lorsque f1.get (null) est appelé.Accéder de manière réfléchie à une variable statique dans une classe Java
Je ne peux pas instancier les classes au préalable car le seul constructeur est celui qui est privé. Donc, il n'y a aucun moyen pour moi de définir explicitement la table non plus.
Quelqu'un sait-il un moyen pour moi d'appeler de manière réfléchie Legacy.A?
public class Legacy {
public static final Legacy A = new Legacy("A");
public static final Legacy B = new Legacy("B");
private String type0;
private static Map<String, Legacy> table = new HashMap<String, Legacy>();
private Legacy(String id) {
type0 = id;
table.put(type0, this);
}
public static void main(String[] args) throws Exception {
Field f1 = Legacy.class.getDeclaredField("A");
Object o = f1.get(null);
}
}
Avant "Réflexion == BAD !!!"
En fait, je ne vois pas comment vous pouvez accéder à Legacy.A sans NPE, réflexion ou non (remplacez ce code de réflexion par 'Object o = Legacy.A' pour que cela se produise). Lorsque j'ai essayé d'exécuter votre code, l'exception s'est produite lors de l'initialisation de la classe. – kdgregory
C'est ce que je reçois pour avoir du code auto-formaté sur les sauvegardes. – Andrew