了解集合中的Java绑定泛型类型

时间:2016-07-24 13:06:57

标签: java generics

我有一个通用绑定类型的集合,定义如下:

Set<? extends BasicShape> shapes = new HashSet<>();

在我的实现中(为了这个问题),BasicShape 不是抽象。

我希望能够做到:

shapes.add(new BasicShape())

但我无法解决编译错误: enter image description here

I have verified,extends包含 - 这意味着它包含上限本身(在我的情况下 - BasicShape)。

我无法在其他SO主题中找到这个特定问题的答案。

有人可以解释一下这种行为吗?

1 个答案:

答案 0 :(得分:2)

当您将shapes声明为

Set<? extends BasicShape> shapes = new HashSet<>();

这意味着您可以为该变量分配Set<BasicShape>Set<Rectangle>Set<Circle>等...

因此,您无法向BasicShape添加任何shapes,因为(就编译器而言)您可能正在尝试向Circle添加Set<Rectangle> }。

如果您将声明更改为:

Set<BasicShape> shapes = new HashSet<>();

您可以向BasicShape添加任何Set个实例。