我不明白Java中的泛型是如何完全运行的。我有类似的情况,我在下面的代码简化:
public static void main(String[] args) {
Map<String, Collection<B>> map1 = test();
Map<String, List<B>> map2 = test();
Map<String, ArrayList<B>> map3 = test();
}
private static Map<String, ArrayList<B>> test() {
return null;
}
创建map1或map2时,我收到一个错误,指出不兼容的类型 - 它期待ArrayList,但是得到了Collection / List。
我该如何解决这个问题?
答案 0 :(得分:2)
这里是成功编译的代码:
public static <B> void main(String[] args) {
Map<String, ? extends Collection<B>> map1 = test();
Map<String, ? extends List<B>> map2 = test();
Map<String, ArrayList<B>> map3 = test();
}
private static <B> Map<String, ArrayList<B>> test() {
return null;
}
您需要添加? extends Collection<B>
和? extends List<B>
,因为撰写? extends Collection
表示构成Object
的{{1}}的{{1}}是value
Map
的{{1}}因此sub type
会被调用,因为它还会返回Collection
test()
类型的Map
,这实际上是value
一个ArrayList
sub type
另请注意,您需要在Collection
和<B>
main
希望它有所帮助!