无论哪种方式,我都没有得到这段代码来编译:
List<List> a = new ArrayList();
List<List<?>> b = new ArrayList();
a = b; // incompatible types
b = a; // incompatible types
在泛型方面,java似乎没有考虑List
并且List<?>
是同一类型。
这是为什么?有什么好的出路吗?
语境
有一个具有以下签名的库函数:public <T> Set<Class<? extends T>> getSubTypesOf(final Class<T> type)
. 这适用于作为参数传递的简单类型,但在泛型的情况下,结果未使用通配符参数化,导致 javac 抱怨原始类型。我想将结果传播到我的应用程序的其余部分,Set<Class<? extends GenericTypeHere<?>>>
但简单的转换无法按我的预期工作。
编辑:解决方案
感谢您的回答,这是我最终如何使其工作的方法:
@SuppressWarnings({"rawtypes", "unchecked"})
private static Set<Class<? extends GenericTypeHere<?>>> factoryTypes() {
return (Set) new Reflections("...").getSubTypesOf(GenericTypeHere.class);
}