我没有得到这个代码编译的方式:
List<List> a = new ArrayList();
List<List<?>> b = new ArrayList();
a = b; // incompatible types
b = a; // incompatible types
Run Code Online (Sandbox Code Playgroud)
似乎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);
}
Run Code Online (Sandbox Code Playgroud)