Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与映射不兼容的类型错误_Java_Generics - Fatal编程技术网

Java 与映射不兼容的类型错误

Java 与映射不兼容的类型错误,java,generics,Java,Generics,下面是一个让我困惑的代码示例 如果我尝试创建一个有界类型的集合,并将同一个变量分配给另一个变量,该变量是另一个无界未知类型的集合,那么代码会起作用 List<? extends Number> numberList = new ArrayList<>(); List<?> anotherList = numberList; // OK List anotherList=numberList;//好啊 如果我在一个映射中尝试同样的操作,我会得到“不兼容类型”

下面是一个让我困惑的代码示例

如果我尝试创建一个有界类型的集合,并将同一个变量分配给另一个变量,该变量是另一个无界未知类型的集合,那么代码会起作用

List<? extends Number> numberList = new ArrayList<>();
List<?> anotherList = numberList; // OK
List anotherList=numberList;//好啊
如果我在一个映射中尝试同样的操作,我会得到“不兼容类型”错误

Map>anotherMap=numberMap;//错误
错误显示:

Map<String,List<? extends Number>> cannot be converted to Map<String,List<?>>
Map>
是不是
地图>

为了您的方便,这是全班同学

我试图理解为什么这不起作用,以及我应该如何更改它才能使其起作用。

仅仅因为
列表
并不意味着
映射
,原因与
列表
不是
列表
的子类型相同,Java的泛型是不变的

要使
List
成为
List
的子类型,必须添加带绑定的通配符。这里的解决方案是相同的——添加
?将
扩展到
列表

Map泛型不是协变的。就像
列表
不是
列表
,而是
地图
Map<String,List<? extends Number>> cannot be converted to Map<String,List<?>>
Map<String, ? extends List<?>> anotherMap = numberMap;