Java:编译错误,将实现列表的Map分配给泛型类型的List

时间:2015-02-06 19:58:58

标签: java

以下代码已简化以显示我的问题:

我有一个界面:

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>>();

这是为什么?

1 个答案:

答案 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?