0

代码让我感到困惑:

 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> 类型中的方法 add(capture#2-of ? extends Map) 不适用于参数 (SortedMap) 为什么?SortedMap 扩展了 Map,TreeMap 是一个实现 SortedMap 的类。

4

1 回答 1

3

这表示

 Collection<? extends Map<String, String>> a ;

的元素a是扩展 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,因为它是这种类型。

于 2013-09-20T10:21:50.717 回答