Java 通过反射修改基本数据类型

Java 通过反射修改基本数据类型,java,variables,reflection,field,primitive,Java,Variables,Reflection,Field,Primitive,我目前正在(独立地)研究反射,我正在使用Field类,并且我已经找到了如何获取声明变量的名称和值;但是,我希望通过正在实例化的字段对象修改变量。 这是我的密码: public void handleOutput() { try { Field f = getClass().getDeclaredField("test"); f.setInt(int.class, 1); System.out.println(f.getName()+": "

我目前正在(独立地)研究反射,我正在使用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.throwsetilegalargumentException处( (未知来源) 在sun.reflect.UnsafeFieldAccessorImpl.throwsetilegalargumentException处( (未知来源) 在sun.reflect.UnsafeFieldAccessorImpl.ensureObj(未知源) 在sun.reflect.UnsafeIntegerFieldAccessorImpl.setInt处(未知源) 位于java.lang.reflect.Field.setInt(未知源) 在Main.handleOutput(Main.java:13) Main.Main(Main.java:28) 按任意键继续

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

您的意思是

f.setInt(this, 1);

你读过javadoc吗?
Field#将
期望的第一个参数设置为什么?哇,这太尴尬了。在这个场景中,我对this关键字的整个用法有点困惑,您能解释一下这行代码为什么有效吗?@Dan
字段
的属性,而不是实例的属性。为了对特定实例进行更改,您需要将要执行操作的实例传递到方法中。在本例中,该实例与
this
相同,因此这就是您传入的内容。