2013-08-24 49 views
4

我有A類的方法:Java反射getDeclaredMethod()與通用類的類型

class Parameter { 
... 
} 

class A { 
    private <T extends B> void call(T object, Parameter... parameters){ 
    ... 
    } 
} 

現在我想使用反射來獲取方法 「呼叫」,

A a = new A(); 
// My question is what should be arguments in getDeclaredMethod 
//Method method = a.getClass().getDeclaredMethod() 

THX。

+1

'Class a = new A();'是無效的。您的意思是'Class a = new A()。getClass();'或'A a = new A();'。 – ApproachingDarknessFish

+0

對不起,我的意思是a a = new A()。 – user537555

回答

6

他們應該BParameter[],因爲BTerasure和可變參數作爲數組實現的:

Method method = a.getClass().getDeclaredMethod(
     "call", 
     B.class, 
     Parameter[].class 
); 

注意,你有一個語法錯誤:<T extends of B>應該<T extends B>

另請注意,您顯示的方法並不一定是通用的。這也可以工作:

private void call(B object, Parameter... parameters) { ... } 
+0

謝謝,它的作品!我也更新了語法錯誤。順便說一句,我想知道爲什麼B.class在這裏工作以及Parameter []。class是什麼意思。 – user537555

+0

@ user537555很高興幫助! '.class'返回表示該類型的'Class'字面值。它適用於像'Parameter [] .class'這樣的數組類型,甚至像'int.class'這樣的基本類型(這就是你如何查找一個採用'int'的方法)。 –