Я играл с отражением в Java ... и я немного озадачен.IllegalArgumentException при настройке открытого участника
Я надеялся, что приведенная ниже программа позволит мне изменить значение переменной открытого члена внутри класса. Однако я получаю исключение IllegalArgumentException. Есть идеи?
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)
}
}
Я получаю это сообщение -
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)
Спасибо.
Будьте осторожны, используя 'decFields [0]', если вы планируете добавлять дополнительные поля в будущем! – toolkit