我有以下功能
编辑:将int更改为Long类
protected <T> ApiResponse<T> getApiResponse(Object obj, Class<T> clasx)
Run Code Online (Sandbox Code Playgroud)
我如何将List<Long>类作为第二个参数传递?
我可以通过,List<Long>.class但那不起作用吗?
类型擦除意味着你只能通过List.class.
从链接的文档:
当实例化泛型类型时,编译器通过称为类型擦除的技术来转换这些类型 - 这是一种编译器删除与类型参数相关的所有信息并在类或方法中键入参数的过程.类型擦除使得使用泛型的Java应用程序能够维护与泛型之前创建的Java库和应用程序的二进制兼容性.
例如,
Box<String>被转换为类型Box,它被称为原始类型 - 原始类型是没有任何类型参数的泛型类或接口名称.这意味着您无法找到泛型类在运行时使用的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
}
}
Run Code Online (Sandbox Code Playgroud)
以粗体显示的操作在运行时没有意义,因为编译器会在编译时删除有关实际类型参数(由type参数表示
E)的所有信息.