让我感到困惑的代码:
Collection<? extends Map<String, String>> a =
new ArrayList<SortedMap<String, String>>();
SortedMap<String, String> b = new TreeMap<String, String>();
b.put("1","a");
错误:
a.add(b);
方法在类型Collection&gt;中添加(捕获#2-of?extends Map)。不适用于参数(SortedMap) 为什么? SortedMap扩展了Map,TreeMap是一个实现SortedMap的类。
答案 0 :(得分:3)
这意味着
Collection<? extends Map<String, String>> a ;
a
的元素是未知类,它扩展了Map。你的意思是当你得到一个值时,它是一个Map,但是你不能说哪个地图有效添加到集合中。
例如,a
不知道扩展Map的类,因此它不能允许任何子类,因为它不知道哪个是有效的。
List<HashMap<String, String>> listOfMap = new ArrayList<>();
Collection<? extends Map<String, String>> a = listOfMap;
SortedMap<String, String> b = new TreeMap<String, String>();
b.put("1", "a");
a.add(b); // produces an error as it should.
如果您将a
更改为
Collection<SortedMap<String, String>> a = new ArrayList<SortedMap<String, String>>();
可以添加b
,因为它是这种类型。