java - 如何实例化像 Class<Foo<T>> 这样的泛型变量?

标签 java generics

我需要实例化通用变量,如 Class>。 例如,

Class<? extends List<String>> = ...

变体 1:

Class<? extends List<String>> clazz = LinkedList.class;

不起作用 - “不兼容的类型”。

变体 2:

Class<? extends List> clazz = LinkedList.class;

工作,但在这种情况下 List 是原始类型 - 不好。

如何实例化这样的变量?

最佳答案

Class<List<String>> 并没有什么意义,因为它相当于 Class<List<Integer>> (由于删除,两者都是对原始列表的引用)。

话虽如此,如果您的意图是代表 List<String>类型,这是可能的,请参阅 TypeLiteralGoogle Guice .

TypeLiteral<List<String>> type = new TypeLiteral<List<String>>() {};
System.out.println(type.getType()); //should print List<String>

使之成为可能的机制是对静态类型声明的反射,在类定义( class X extends Foo<Y> ,Y 可通过反射获得,它保留在字节码中),方法定义等中。TypeLiteral 使用前者,你可能会注意到它创建了一个全新的类,因此最终效果是您的类型参数得到了保留。当您真正反对删除时,这是一个很好的解决方法。

关于java - 如何实例化像 Class<Foo<T>> 这样的泛型变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2056450/

相关文章:

java - 轮询时 AWS SWF 决策者 'java.net.SocketTimeoutException: Read timed out'

java - 数据结构(Weiss Java 书): Why allocate Comparable[] in BinaryHeap<T> array instead of T[]?

c# - 将泛型类型参数转换为 C# 中的特定类型

java - 如何从 Android 中的热敏打印机打印?

java - @FunctionalInterface 也实现了andThen?

java - Java 中的泛型

java - 如何定义一个灵活接受声明类型的子类的函数

java - 解析 XSD 以列出元素

java - 在 Spring Controller 中 Autowiring HttpServletRequest

java - J2ME Midlet和PC之间如何通信?