我有一个通用绑定类型的集合,定义如下:
Set<? extends BasicShape> shapes = new HashSet<>();
在我的实现中(为了这个问题),BasicShape 不是抽象。
我希望能够做到:
shapes.add(new BasicShape())
I have verified,extends包含 - 这意味着它包含上限本身(在我的情况下 - BasicShape)。
我无法在其他SO主题中找到这个特定问题的答案。
有人可以解释一下这种行为吗?
答案 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
个实例。