2012-05-09 20 views
1

我有以下功能得到的.class的列表<int>在java中

編輯:改變INT上課龍

protected <T> ApiResponse<T> getApiResponse(Object obj, Class<T> clasx) 

如何傳遞List<Long>類作爲第二個參數?

我可以通過List<Long>.class但這不起作用嗎?

回答

8

Type erasure表示您只能通過List.class

從鏈接的文檔:

當一般類型被實例化,所述編譯器通過的技術被稱爲類型擦除翻譯那些類型 - 一種方法,其中,編譯器將刪除相關的所有信息,以輸入參數和內鍵入參數一類或一種方法。 Type erasure使得使用泛型的Java應用程序能夠保持與泛型之前創建的Java庫和應用程序的二進制兼容性。

例如,Box<String>被翻譯爲Box類型,該類型被稱爲原始類型 - 原始類型是沒有任何類型參數的泛型類或接口名稱。這意味着您無法找到泛型類在運行時使用的對象類型。以下操作是不可能的:

public class MyClass<E> { 
    public static void myMethod(Object item) { 
    // Compiler error 
    if (item instanceof E) { 
     ... 
    } 
    E item2 = new E();  // Compiler error 
    E[] iArray = new E[10]; // Compiler error 
    E obj = (E)new Object(); // Unchecked cast warning 
    } 
} 

以粗體示出的操作是在運行時無意義,因爲編譯器刪除有關的實際類型參數在編譯時(由類型參數E表示)的所有信息。

0

您無法將int轉換爲List。 因爲這裏的T應該從Object延伸。

IntegerObject延伸,但不是int

+3

Java中沒有'Int',只有'int'和'Integer'可用。 – home

+0

對不起,不重新檢查這一點。 :)我會修改答案。但主要的想法就是我所說的。 :) – nnhthuan