通过反射修改原始数据类型

时间:2014-10-11 21:45:29

标签: java variables reflection field primitive

我目前正在研究反思(独立),我正在使用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         at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException( 未知来源)         at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException( 未知来源)         at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)         at sun.reflect.UnsafeIntegerFieldAccessorImpl.setInt(Unknown Source)         在java.lang.reflect.Field.setInt(未知来源)         在Main.handleOutput(Main.java:13)         在Main.main(Main.java:28) 按任意键继续 。 。

如何使用声明的字段修改原始int数据类型测试的值?

1 个答案:

答案 0 :(得分:1)

看起来像你的意思

f.setInt(this, 1);