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;