В настоящее время я изучаю отражение (независимо), я работаю с классом Field, и я выяснил, как получить имя и значение объявленной переменной; однако я хочу изменить переменную через объект Field, который я создаю. Вот мой код:Изменение примитивных типов данных через отражение
public void handleOutput() {
try {
Field f = getClass().getDeclaredField("test");
f.setInt(int.class, 1);
System.out.println(f.getName()+": "+f.get(this));
System.out.println("test: "+test);
} catch (IllegalAccessException | NoSuchFieldException e) {
e.printStackTrace();
}
}
С помощью этого метода при том, что IllegalArgumentException выбрасывают:
Exception in thread "main" java.lang.IllegalArgumentException: Can not set int f
IELD Main.test к java.lang.Class в sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException ( Неизвестный источник) at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException ( Неизвестный источник) at sun.reflect.UnsafeFieldAccessorImpl.ensureObj (Неизвестный источник) at sun.reflect.UnsafeIntegerFieldAccessorImpl.setInt (Неизвестный источник) на java.lang.reflect.Field.setInt (Неизвестный источник) на Main.handleOutput (Main.java:13) на Main.main (Main.java: 28) Нажмите любую клавишу, чтобы продолжить. , ,
Как изменить значение теста типа данных примитивного типа с использованием объявленного поля?
Вы читали Javadoc? Что означает 'Field # set' в качестве первого аргумента? –