我想调用的方法(我知道它是公开的,但我需要使用反射):
public byte[] myMethod()
Run Code Online (Sandbox Code Playgroud)
我得到这样的Method对象并m包含myMethod()(我用调试器检查)
Method m = Class.forName(MyClass.class.getName()).getDeclaredMethod("myMethod");
Run Code Online (Sandbox Code Playgroud)
最后,我需要调用m并将结果传递给对象:
byte[] myBytes = null;
m.invoke(myBytes);
Run Code Online (Sandbox Code Playgroud)
没有抛出异常但myBytes保持为null ...我也尝试了以下方法但没有取得更多成功:
m.invoke(myBytes, (Object[])null);
Run Code Online (Sandbox Code Playgroud)
如何获得调用myBytes的结果?
T.J*_*der 27
没有抛出异常,但myBytes保持为null
正确,你想要的是:
byte[] myBytes = (byte[])m.invoke(yourInstance);
Run Code Online (Sandbox Code Playgroud)
更多文档.笔记:
invoke.invoke是调用方法的实例(因为你列出了一个实例方法,而不是一个静态方法;如果它是静态的,那么第一个参数就是null).您没有在任何地方显示引用该实例的变量,因此我yourInstance在上面调用了它.Jon*_*eet 12
您目前正在传递的价值myBytes 为方法-因为它是你会在调用它的目标对象.这是回报值.
你要:
byte[] myBytes = (byte[]) m.invoke(target);
Run Code Online (Sandbox Code Playgroud)
target你要调用它的实例在哪里(因为它是一个实例方法).
如果您没有实例,则该方法必须是静态方法,此时您将调用更改为:
byte[] myBytes = (byte[]) m.invoke(null);
Run Code Online (Sandbox Code Playgroud)