我有以下功能得到的.class的列表<int>在java中
編輯:改變INT上課龍
protected <T> ApiResponse<T> getApiResponse(Object obj, Class<T> clasx)
如何傳遞List<Long>
類作爲第二個參數?
我可以通過List<Long>.class
但這不起作用嗎?
我有以下功能得到的.class的列表<int>在java中
編輯:改變INT上課龍
protected <T> ApiResponse<T> getApiResponse(Object obj, Class<T> clasx)
如何傳遞List<Long>
類作爲第二個參數?
我可以通過List<Long>.class
但這不起作用嗎?
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
表示)的所有信息。
您無法將int
轉換爲List
。 因爲這裏的T
應該從Object
延伸。
Integer
從Object
延伸,但不是int
。
Java中沒有'Int',只有'int'和'Integer'可用。 – home
對不起,不重新檢查這一點。 :)我會修改答案。但主要的想法就是我所說的。 :) – nnhthuan