2011-01-05 61 views
0

通用型我有一個看起來像如何提取從ARG

public void (Foo<T> foo) 

在這種方法中,我需要調用了

Class<T> clazz

作爲參數的方法的方法簽名。我如何從foo獲得類型爲Class<T>的參考?謝謝

回答

3

由於類型擦除,你不能直接獲取類型參數。這些信息在運行時根本不存在。 API需要參考類型參數的類需要採取類的對象實例...

公共無效ABC(美孚< T> FOO,<類T> clazz所)

+0

Java 7的是應該將具體化泛型類型與您將能夠解決這個問題 – LINEMAN78 2011-01-05 01:56:32

0

你確定你的方法簽名是正確的?

我認爲,如果沒有T類你不能讓的說法看起來像

public void method(Class<T> obj){ 
} 

類型參數必須存在,所以你已經知道的傳入的類型。
當你把它變成這樣:

public <T> void method(T u){ 
    System.out.println("U: " + u.getClass().getName()); 
} 

你應該能夠得到的類名或剛下課參考,不?

文檔:
http://download.oracle.com/javase/tutorial/java/generics/genmethods.html

+0

是的,我無意中省略。好建議,我會試試看。 – Andrew 2011-01-05 03:47:50

+0

讓我知道是否有幫助:) GL;) – 2011-01-05 13:46:50