实现扩展接口J的接口I的B类是否也扩展了类型I?

时间:2013-09-20 10:19:11

标签: java class map interface implementation

让我感到困惑的代码:

 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的类。

1 个答案:

答案 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,因为它是这种类型。