2012-01-06 49 views
5

的參數是ArrayList的<T>我怎麼能得到T的類名參數是ArrayList的<T>,我怎麼能得到T的類名

public static <T extends Object> void test(ArrayList<T> list){ 
     T temp; 
     Class classType=temp.getClass(); 
     System.out.println(classType.getName()); 
} 

將無法​​編譯:他局部變量temp可能沒有已初始化。

但我怎樣才能得到模板類的className。

回答

6

您無法獲得泛型類型。這是由於泛型如何在Java中實現(使用類型擦除)。基本上,只能使用泛型在編譯時處捕獲類型錯誤

您的代碼無法編譯,因爲您正嘗試對尚未初始化的本地變量調用getClass

你可以做的反而是:

  • 傳中除了列表中的Class<T>參數講述類型的方法使用
  • 或在列表的第一個元素看(如果存在)並且相信它的運行時類型足夠有代表性(它可能不是)
4

由於Java泛型的實現類型擦除,你不能。當你需要知道類,典型的訣竅是通過類如所謂的「令牌類型」單獨的參數,如:

public static <T extends Object> void test(ArrayList<T> list, Class<T> classType) { 
} 

這招是在tutorial on Java generics一定程度上討論(見底部該例子的頁面)。

1

你可以試試這個解決方法:

public static <T extends Object> void test(ArrayList<T> list){ 
     if(null!=list && !list.isEmpty())   
       System.out.println(list.get(0).getClass().getName()); 
} 
+1

如果(1)該列表是空的,這並不工作(即使你套管出來,所以它不會崩潰,但它仍然未能解決(2)第一個元素爲null,或者(3)第一個元素的類實際上是T的一個子類,它會給你錯誤的答案 – newacct 2012-01-06 08:02:03

相關問題