Using parent classes in Java generics parameters 
我不理解Java中的泛型是如何工作的。我在下面的代码中简化了类似的情况:
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | public static void main(String[]  args) { 
    Map<String , Collection>  map1 =  test(); 
    Map<String , List>  map2 =  test(); 
    Map<String , ArrayList>  map3 =  test();
} 
private static  Map<String , ArrayList>  test() {
    return null;
} | 
当创建map1或map2时,我得到一个错误,它指出不兼容的类型——它需要arraylist,但得到的却是collection/list。
我该如何解决这个问题?
		
		
- 你可能想看看之前关于这个问题的问题:为什么我们不能做listmylist=arraylist();。如何将父类型列表强制转换为子类型列表?
 
	 
下面是将成功编译的代码:
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | public static  void main(String[]  args) { 
    Map<String , ? extends  Collection>  map1 =  test(); 
    Map<String , ? extends  List>  map2 =  test(); 
    Map<String , ArrayList>  map3 =  test();
}
private static   Map<String , ArrayList>  test() {
    return null;
} | 
你需要增加? extends Collection和EDOCX1 1〔1〕因为写? extends Collection意味着构成Map的value的Object是Collection类的sub type的,因此会调用test()因为它还返回一个Map的EDOCX11〔5〕的EDOCX11〔4〕是EDOCX11〔11〔11〕11〔11〔11〕11〔11〕的EDOCX11〔4〕的EDOCX11〔4〕是EDOCX11〔7〕类的EDOCX11〔6〕的,因此也会调用EDOCX11〔8〕因为它还返回一个EDOCX11〔5〕的EDOCX11〔5〕的EDOCX1类型,实际上是一个EDOCX1江户十一〔7〕的〔6〕。
另请注意,您需要在main和test()的签名中添加。
希望它有帮助!