gpt4 book ai didi

java - 使用反射调用字段上的方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:09:31 28 4
gpt4 key购买 nike

我的代码如下所示:

class MyObject {

MyField f = new MyField();

}

class MyField {
public void greatMethod();
}

有没有办法在 MyObject 类的对象上使用反射来调用 greatMethod()

我尝试了以下方法:

Field f = myObject.getClass().getDeclaredField("f");
Method myMethod = f.getDeclaringClass().getDeclaredMethod("greatMethod", new Class[]{});
myMethod.invoke(f);

但它试图直接在我的 myObject 上调用 greatMethod(),而不是在其中的字段 f 上。有没有一种方法可以在不需要修改 MyObject 类的情况下实现这一点(这样它就会实现一个调用 f 上适当方法的方法)。

最佳答案

你自己关闭了,你只需要获取声明的方法并在对象实例中包含的字段实例上调用它,而不是字段,如下所示

    // obtain an object instance
MyObject myObjectInstance = new MyObject();

// get the field definition
Field fieldDefinition = myObjectInstance.getClass().getDeclaredField("f");

// make it accessible
fieldDefinition.setAccessible(true);

// obtain the field value from the object instance
Object fieldValue = fieldDefinition.get(myObjectInstance);

// get declared method
Method myMethod =fieldValue.getClass().getDeclaredMethod("greatMethod", new Class[]{});

// invoke method on the instance of the field from yor object instance
myMethod.invoke(fieldValue);

关于java - 使用反射调用字段上的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22929486/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com