【发布时间】:2016-04-27 22:16:03
【问题描述】:
我需要提供课程。我有一个 Foo 类,所以如果我提供 Foo.class 它可以正常工作,但我需要提供 List<Foo>.class 但这不存在。
我怎样才能通过列表类型的类?
感谢任何帮助。
【问题讨论】:
-
你是对的,
List<Foo>.class不存在,因为类型擦除。只有List.class。
标签: java
我需要提供课程。我有一个 Foo 类,所以如果我提供 Foo.class 它可以正常工作,但我需要提供 List<Foo>.class 但这不存在。
我怎样才能通过列表类型的类?
感谢任何帮助。
【问题讨论】:
List<Foo>.class 不存在,因为类型擦除。只有List.class。
标签: java
由于type erasure,您不能。在运行时,泛型类型参数被删除,不再可用。因此,尽管List<Foo> 可能在编译时作为泛型存在,但在运行时您将只有List.class,类型为Class<List>。
来自Java Language Specification, version 8, section 15.8.2:
如果命名类型是类型变量(第 4.4 节)或参数化类型(第 4.5 节)或元素类型为类型变量或参数化类型的数组,则会出现编译时错误。
例如List<Foo>.class、T.class、List<Foo>[].class和T[].class都是无效的(假设T是一个类型参数)。
【讨论】: