我需要实例化通用变量,如 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>
类型,这是可能的,请参阅 TypeLiteral的 Google 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/