【发布时间】:2014-10-11 21:45:28
【问题描述】:
我目前正在研究反射(独立),我正在使用 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
将 Main.test 转换为 java.lang.Class 在 sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException( 来源不明) 在 sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException( 来源不明) 在 sun.reflect.UnsafeFieldAccessorImpl.ensureObj(未知来源) 在 sun.reflect.UnsafeIntegerFieldAccessorImpl.setInt(未知来源) 在 java.lang.reflect.Field.setInt(未知来源) 在 Main.handleOutput(Main.java:13) 在 Main.main(Main.java:28) 按任意键继续 。 . .
如何使用声明的字段修改原始 int 数据类型测试的值?
【问题讨论】:
-
你读过javadoc吗?
Field#set的第一个参数是什么?
标签: java variables reflection field primitive