J'ai joué avec la réflexion en Java ... et je suis un peu déconcerté. J'espérais que le programme ci-dessous me permettrait de changer la valeur d'une variable membre public au sein d'une classe. Cependant, je reçois une exception IllegalArgumentException. Des idées?IllegalArgumentException lors de la définition du membre public
public class ColinTest {
public String msg = "fail";
public ColinTest() { }
public static void main(String args[]) throws Exception {
ColinTest test = new ColinTest();
Class c = test.getClass();
Field[] decfields = c.getDeclaredFields();
decfields[0].set("msg", "success");
System.out.println(ColinTest.msg)
}
}
Je reçois ce message -
Exception in thread "main" java.lang.IllegalArgumentException
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:57)
at java.lang.reflect.Field.set(Field.java:656)
at ColinTest.main(ColinTest.java:44)
Merci.
Faites attention en utilisant 'decFields [0]' si vous prévoyez d'ajouter plus de champs dans le futur! – toolkit