以下代码已简化以显示我的问题:
我有一个界面:
public interface Cell {
public String getDescription();
}
我有一个具体的课程:
public class ConcreteCell implements Cell {
public String getDescription() {
return "concrete";
}
}
现在我有一个将String映射到Cells列表的数据结构:
Map<String, List<Cell>> map;
此代码无法编译:
map = new HashMap<String, List<ConcreteCell>>();
这是为什么?
答案 0 :(得分:2)
如果您使用Map<String, ? extends List<? extends Cell>>
,这将正常工作。原因是List<ConcreteCell>
不是List<Cell>
的子类型,然后Map<String, List<ConcreteCell>>
仍然不是Map<String, List<? extends Cell>>
的子类型。
在SO的许多问题中讨论了这个问题的真实原因,包括Java: Casting from List<B> to List<A> when B implements A?。