我想调用的方法(我知道它是公开的,但我需要使用反射):
public byte[] myMethod()
我得到这样的 Method
对象, m
包含 myMethod()
(我用调试器检查过)
Method m = Class.forName(MyClass.class.getName()).getDeclaredMethod("myMethod");
最后,我需要调用m并将结果传递给对象:
byte[] myBytes = null;
m.invoke(myBytes);
没有抛出异常但 myBytes
保持为null ...我也尝试了以下内容但没有取得更多成功:
m.invoke(myBytes, (Object[])null);
如何获得调用myBytes的结果?
3 回答
正确,你想要的是:
更多the documentation . 笔记:
方法的返回值是
invoke
的返回值 .invoke
的第一个参数是调用该方法的实例(因为您已经列出了实例方法,而不是静态方法;如果它是静态的,则第一个参数将是null
) . 您没有在任何地方显示引用该实例的变量,因此我在上面将其称为yourInstance
.您当前正在将
myBytes
的值传递给方法 - 就好像's the target object you'将其调用一样 . 这是回报值 .你要:
其中
target
是您要调用它的实例(因为它是一个实例方法) .如果您没有实例,则该方法必须是静态方法,此时您将调用更改为:
invoke
方法将第一个参数作为参数后跟的方法的实例对象 . 这里方法签名是public byte[] myMethod()
用于调用
myMethod
的代码: