代码让我感到困惑:
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 的类。
最佳答案
这意味着
Collection<? extends Map<String, String>> a ;
a
的元素是扩展 Map 的未知类。您的意思是,当您获取一个值时,它是一个 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
就可以了,因为它是这种类型。
关于java - 实现扩展接口(interface) J 的接口(interface) I 的类 B 是否也扩展类型 I?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18914352/