我要调用的方法(我知道它是公共(public)的,但我需要使用反射):
public byte[] myMethod()
我得到这样的 Method
对象并且 m
包含 myMethod()
(我用调试器检查过)
Method m = Class.forName(MyClass.class.getName()).getDeclaredMethod("myMethod");
最后我需要调用 m 并将结果传递给一个对象:
byte[] myBytes = null;
m.invoke(myBytes);
没有抛出异常,但 myBytes
保持为空......我也尝试了以下但没有成功:
m.invoke(myBytes, (Object[])null);
如何获取调用 myBytes 的结果?
最佳答案
No exception is thrown but myBytes stays null
没错,你想要的是:
byte[] myBytes = (byte[])m.invoke(yourInstance);
更多信息 the documentation .备注:
- 方法的返回值是
invoke
的返回值。 invoke
的第一个参数是调用该方法的实例(因为您列出的是实例方法,而不是静态方法;如果它是静态的,第一个参数将是空
)。您没有在任何地方显示引用该实例的变量,因此我在上面将其称为yourInstance
。
关于Java 反射 API : Invoking a method without parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14443808/