2

我有以下功能

编辑:将 int 更改为 Long 类

protected <T> ApiResponse<T> getApiResponse(Object obj, Class<T> clasx) 

我怎样才能通过List<Long>类作为第二个参数?

我可以通过List<Long>.class,但这不起作用吗?

4

2 回答 2

8

类型擦除意味着你只能通过List.class.

从链接的文档中:

当泛型类型被实例化时,编译器通过一种称为类型擦除的技术来转换这些类型——在这个过程中,编译器会删除与类或方法中的类型参数和类型参数相关的所有信息。类型擦除使使用泛型的 Java 应用程序能够保持与在泛型之前创建的 Java 库和应用程序的二进制兼容性。

例如,Box<String>被翻译为 type 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
  }
}

以粗体显示的操作在运行时是没有意义的,因为编译器在编译时删除了关于实际类型参数(由类型参数表示E)的所有信息。

于 2012-05-09T06:28:08.050 回答
0

你不能int进入List. 因为T这里应该是从Object.

Integer扩展自Object,但不是int

于 2012-05-09T06:25:31.017 回答