2012-05-09 19 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