Java 继承字段上的JDI-ObjectReference.setValue()

Java 继承字段上的JDI-ObjectReference.setValue(),java,jdi,Java,Jdi,我正在使用JDI调试一个程序。我试图更改某个ObjectReference中某个字段的值。我有Field对象,因为我可以通过 ObjectReference.referencetype().allFields() 但是,我不能使用 ObjectReference.setValue(Field paramField, Value paramValue) 因为这只适用于此类或其直接超类中的字段,所以不包括层次结构中更高的类 是否可以更改高于直接超类的类中字段的值? 如果是这样的话,我将非常感谢您

我正在使用JDI调试一个程序。我试图更改某个ObjectReference中某个字段的值。我有Field对象,因为我可以通过

ObjectReference.referencetype().allFields()
但是,我不能使用

ObjectReference.setValue(Field paramField, Value paramValue)
因为这只适用于此类或其直接超类中的字段,所以不包括层次结构中更高的类

是否可以更改高于直接超类的类中字段的值? 如果是这样的话,我将非常感谢您的帮助

谢谢,

院长

编辑:在调用ObjectReference.setValue()的行中抛出以下错误:


使用org.apache.commons.beanutils.PropertyUtils,您甚至可以获得/设置如下继承字段:

PropertyUtils.getNestedProperty(obj, "property")
适用于所有字段,无论该字段在层次结构中有多高

例如:

public class AClass {

    private int a = 10;

    public void a() {
        System.out.println("a=" + a);
    }

}
public class BClass extends AClass{

    private int b = 20;

    public void b() {
        System.out.println("b=" + b);
    }

}
public class CClass extends BClass{

    public void checkValues() {
        a();
        b();
    }
}
下面是在其更高的超类a中更改字段a值的代码

StackFrame currentFrame = mEvent.thread().frame(0);

ObjectReference objectReference = currentFrame.thisObject();

List<Field> fields = objectReference.referenceType().allFields();
System.out.println(fields);

objectReference.setValue(fields.get(1), vm.mirrorOf(30));

谢谢,但是我正在尝试访问另一个进程的变量,PropertyUtil会这样做吗?
public class AClass {

    private int a = 10;

    public void a() {
        System.out.println("a=" + a);
    }

}
public class BClass extends AClass{

    private int b = 20;

    public void b() {
        System.out.println("b=" + b);
    }

}
public class CClass extends BClass{

    public void checkValues() {
        a();
        b();
    }
}
StackFrame currentFrame = mEvent.thread().frame(0);

ObjectReference objectReference = currentFrame.thisObject();

List<Field> fields = objectReference.referenceType().allFields();
System.out.println(fields);

objectReference.setValue(fields.get(1), vm.mirrorOf(30));
a=30
b=20