Java反射API:调用不带参数的方法
我想调用的方法(我知道它是公共的,但我需要使用反射): 我得到了这样的Java反射API:调用不带参数的方法,java,reflection,Java,Reflection,我想调用的方法(我知道它是公共的,但我需要使用反射): 我得到了这样的方法对象,并且m包含myMethod()(我使用调试器进行了检查) 最后,我需要调用m并将结果传递给一个对象: byte[] myBytes = null; m.invoke(myBytes); 未引发异常,但myBytes保持为空。。。我还尝试了以下方法,但没有取得更多成功: m.invoke(myBytes, (Object[])null); 如何获取调用myBytes的结果 未引发异常,但myBytes保持为空 没错
方法
对象,并且m
包含myMethod()
(我使用调试器进行了检查)
最后,我需要调用m并将结果传递给一个对象:
byte[] myBytes = null;
m.invoke(myBytes);
未引发异常,但myBytes
保持为空。。。我还尝试了以下方法,但没有取得更多成功:
m.invoke(myBytes, (Object[])null);
如何获取调用myBytes的结果
未引发异常,但myBytes保持为空
没错,你想要的是:
byte[] myBytes = (byte[])m.invoke(yourInstance);
更多。注:
- 方法的返回值是
的返回值invoke
的第一个参数是调用该方法的实例(因为您列出了一个实例方法,而不是静态方法;如果它是静态的,第一个参数将是invoke
)。您没有在任何地方显示引用实例的变量,因此我在上面的示例中将其称为null
yourInstance
myBytes
的值传递给该方法,就好像您要调用它的目标对象一样。这是返回值
你想要:
byte[] myBytes = (byte[]) m.invoke(target);
其中target
是要调用它的实例(因为它是一个实例方法)
如果没有实例,则该方法必须是静态方法,此时您需要将调用更改为:
byte[] myBytes = (byte[]) m.invoke(null);
invoke
方法将第一个参数作为方法的实例对象,后跟参数。
这里的方法签名是public byte[]myMethod()
要调用的代码myMethod
:
byte[] returnVal = (byte[]) m.invoke(MyClass.newInstance());
byte[] myBytes = (byte[]) m.invoke(null);
byte[] returnVal = (byte[]) m.invoke(MyClass.newInstance());