2013-07-24 41 views
0

我已經在StackOverflow和其他網站上使用了我可以找到的所有建議。我正在嘗試使用反射調用一個方法。這裏是我的方法的代碼:使用反射調用String []參數的方法

public void my_method(String[] args) { 

    for(int i=0; i<args.length; i++) 
    { 
     System.out.println(args); 
    } 
} 

下面是我用於反射代碼

Class[] paramStringArray = new Class[1];  
paramStringArray[0] = String[].class; 
String[] argu = {"hey", "there"}; 

Method method = cls.getDeclaredMethod("my_method", paramStringArray); 
method.invoke(obj, new Object[]{argu}); 

我的問題是,當我運行程序時,我看到打印的輸出:[Ljava。 lang.String; @ 70a6aa31 [Ljava.lang.String; @ 70a6aa31

我試過了所有我能找到的建議。有人可以幫助我嗎?

謝謝!

+0

'Object#toString()'是你的關鍵字。當你還不知道如何打印對象時,爲什麼要嘗試高級反射主題?慢一點。 –

+0

'args'是一個'String []'。它沒有自定義的'toString()'方法來打印它的內容。使用'Arrays.toString(args);'返回一個帶有數組內容的String。 –

回答

1

方法my_method()接收作爲參數a String[]而不是String。你正在調用不同的方法。該代碼應該是這樣的:

paramString[0] = String[].class; 
Method method = cls.getDeclaredMethod("my_method", paramString); 

要調用它,傳遞String[]作爲參數:

method.invoke(obj, new String[]{"x"}); 

此外,循環的my_method()身體應該是指每個元素的位置,不給陣列本身:

System.out.println(args[i]); 
+0

也許'paramStringArray'是'String [] .class'。 –

+1

我敢打賭,代碼沒有正確複製,所以很難知道真正的問題 –

+0

嗯,我在發佈這個問題之前嘗試過Object#toString()。謝謝,雖然 – user2033666

1

您需要打印args[i]而不是你有什麼。

此外,該方法應調用new String[]而不是new Object[]

+0

哦!這是一個非常愚蠢的錯字我做了..我改變它args [我],它現在工作很好。 :) 非常感謝您的注意! – user2033666

相關問題