2013-04-25 27 views
0

我想要得到含有帕拉姆類型的方法的陣列的所有元素(Java.reflect動態getted)的所有數組元素,顯示器的方法PARAM類型

這裏的代碼,如果我有2個PARAMS在該方法中:

Method testMethod = c.getMethod(method.getName(), new Class[] {int.class, String.class}); 

但它應該是動態的,所以我用:method.getTypeParameters()返回上的所有類型的PARAM的陣列。

後來,當我寫:

Method testMethod = c.getMethod(method.getName(), new Class[] {method.getParameterTypes}); 

,但它給我說:​​類型不匹配:不能從類[]轉換到類

的我明白,我必須上環參數,因爲我有:

method.getParameterTypes[0] // gives "int" 

method.getParameterTypes[1] // gives "String" 

那麼我該如何做到這一點?一個循環可能?你有什麼想法嗎?謝謝。

+0

是否使用'getParameterTypes()'或'getTypeParameters()'(你同時在本例中)?有一個很大的區別... – NilsH 2013-04-25 18:46:42

+0

我使用'getParameterTypes' – Copernic 2013-04-25 18:49:15

回答

1
Method testMethod = c.getMethod(
    method.getName(), new Class[] {method.getParameterTypes}); 

應該

Method testMethod = c.getMethod(
    method.getName(), method.getParameterTypes()); 

第一個問題是,你錯過了()getParameterTypes結束。調用方法時,Java需要顯式括號。

第二個問題是,您試圖將結果getParameterTypes,Class<?>[]置於Class[]之內。 Class[]唯一可以包含的是單個類,而不是數組,因此只需使用由getParameterTypes()返回的數組。


我不清楚你爲什麼要這麼做。你可以從一個接口獲取一個Method,並將它應用到該接口的一個實例上,而無需在實例的具體類上查找該方法。對於抽象類也是如此。除非繼承圖中存在漏洞或某種奇怪的相應靜態方法約定,否則不應使用一個方法簽名來獲取另一種方法。這些都可能是重構的機會。

您的代碼庫中的反射越少,人們學習越容易,您將從bug查找程序和其他分析工具獲得的里程越多,並且您將獲得的不完整類路徑問題越少。

+0

謝謝你的作品。這個過程是一個extern應用程序向我發送它的參數和一個ID的方法名稱,我需要從一個目錄加載一個具有此ID的jar。該jar包含webservice客戶端的代理類,最終使用webservice並使用它的pamaters執行該方法。我知道這很令人困惑。 – Copernic 2013-04-25 18:58:29

1

使用Arrays.toString(method.getParameterTypeas())如果你想請參閱的類型。如果你想遍歷並使用它們使用循環:

for (Class<?> type : method.getParameterTypeas()) { 
    // use the type 
}