2013-01-21 10 views
15

せずに、私は(私はそれが国民の知っているが、私はリフレクションを使用する必要があります)を起動したいメソッドメソッドを呼び出す:JavaリフレクションAPI:パラメータ

public byte[] myMethod() 

を私はこのようなMethodオブジェクトを取得し、mは(myMethod()が含まれています

byte[] myBytes = null; 
m.invoke(myBytes); 
012:私は

Method m = Class.forName(MyClass.class.getName()).getDeclaredMethod("myMethod"); 

最後に、私はMを起動し、オブジェクトに結果を渡す必要がある)デバッガで確認しました

例外がスローされないが、null myBytesままです...私はまた、より多くの成功せずに次のことを試してみました:

m.invoke(myBytes, (Object[])null); 

にはどうすれmyBytesへの呼び出しの結果を得ることができますか?

答えて

22

は例外がスローされないが、myBytesが

正しいヌルままされ、何を望んでいたことはありました:the documentation

byte[] myBytes = (byte[])m.invoke(yourInstance); 

より。注:

  • 戻り値はinvokeです。
  • invokeの最初の引数は、メソッドを呼び出すインスタンスです(静的メソッドではなく、静的メソッドではないので、最初の引数はnull)。インスタンスを参照する変数はどこにも表示されていないので、上記ではyourInstanceと呼んでいます。
9

現在に方法をmyBytesの値を渡している - それは、ターゲット・オブジェクトの場合と同様に、あなたはそれを呼び出すことと思います。 returnの値です。

あなたが欲しい:targetはあなたが(それがインスタンスメソッドだとして)それを呼び出したいインスタンスです

byte[] myBytes = (byte[]) m.invoke(target); 

。あなたが呼び出しを変更したい、その時点でインスタンスを持っていない場合、メソッドは静的メソッドである必要があります

、:

byte[] myBytes = (byte[]) m.invoke(null); 
0

invoke方法は、のインスタンスオブジェクトとして最初の引数を取りますこのメソッドにはパラメータが続きます。ここ メソッドのシグネチャは、起動するpublic byte[] myMethod()

コードであるmyMethod

byte[] returnVal = (byte[]) m.invoke(MyClass.newInstance()); 
関連する問題