我有以下功能得到的.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