我有以下功能
编辑:将 int 更改为 Long 类
protected <T> ApiResponse<T> getApiResponse(Object obj, Class<T> clasx)
我怎样才能通过List<Long>
类作为第二个参数?
我可以通过List<Long>.class
,但这不起作用吗?
类型擦除意味着你只能通过List.class
.
从链接的文档中:
当泛型类型被实例化时,编译器通过一种称为类型擦除的技术来转换这些类型——在这个过程中,编译器会删除与类或方法中的类型参数和类型参数相关的所有信息。类型擦除使使用泛型的 Java 应用程序能够保持与在泛型之前创建的 Java 库和应用程序的二进制兼容性。
例如,
Box<String>
被翻译为 typeBox
,称为原始类型——原始类型是没有任何类型参数的泛型类或接口名称。这意味着您无法找出泛型类在运行时使用的 Object 类型。无法进行以下操作:
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
。