java - 实现扩展接口(interface) J 的接口(interface) I 的类 B 是否也扩展类型 I?

标签 java class dictionary 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> 类型中的方法 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/

相关文章:

php - 使用 DOMDocument 类创建 xml 消息的最佳实践

python - 如何在 Python 中激活(执行)类的方法?

python - 在 Python OrderedDict 中获取关键索引?

java - 将滚动条添加到使用 GridLayout 的 Composite

java - 使用 Java 流从列表中的列表中平均特定值

java - 在 EC2 Amazon Linux 上全新安装 Tomcat 出现 404 错误

java - 如何使用循环从 hashmap 中获取值

php - 如何将参数作为局部变量传递到方法中

r - 使用数据值(字典)。 R 中的数据帧和重新编码

Swift 3 通用扩展参数