2013-01-21 67 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"); 

最後,我需要調用米,並將結果傳遞到對象檢查

沒有異常被拋出,但myBytes保持空...我也嘗試沒有取得更大的成功如下:

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

我怎樣才能調用到myBytes的結果呢?

回答

22

沒有異常被拋出,但myBytes保持空

正確的,你想有:

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

the documentation。備註:

  • 該方法的返回值是返回值invoke
  • invoke的第一個參數是要調用該方法的實例(因爲您已列出實例方法,而不是靜態方法;如果它是靜態的,則第一個參數爲null)。你沒有在任何地方顯示一個涉及實例的變量,所以我在上面稱它爲yourInstance
9

您目前正在傳遞的myBytes價值爲方法 - 因爲它是你會在調用它的目標對象。這是返回的值。

你想:

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

其中target是你要調用它(因爲它是一個實例方法)的實例。

如果你沒有一個實例,該方法將必須是一個靜態方法,此時你會改變調用到:

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

invoke方法將第一個參數爲實例對象該方法遵循參數。 以下方法簽名是調用public byte[] myMethod()

代碼myMethod

byte[] returnVal = (byte[]) m.invoke(MyClass.newInstance()); 
相關問題