我无论如何都不能让这段代码编译通过:
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);
}
List<List>
和List<List<?>>
之间没有定义转换。我认为我们对此处的上下文了解不足以确定是否适合进行强制转换,但我在我链接到的问答中展示了如何进行转换。 - Radiodef