Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java反射API:调用不带参数的方法_Java_Reflection - Fatal编程技术网

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());