This question already has answers here:
List<? extends MyType>
(5个答案)
3年前关闭。
我有一个具有通用绑定类型的集合,定义如下:
在我的实现中(为了这个问题),BasicShape不是抽象的。
我希望那时能够做到:
但我不能,编译失败:
I have verified,extends包含在内-这意味着它包括上限本身(在我的情况下为BasicShape)。
我在其他SO线程中找不到此特定问题的答案。
有人可以向我解释这种行为吗?
这意味着您可以为该变量分配
因此,您不能将任何
如果将声明更改为:
您可以将任何
(5个答案)
3年前关闭。
我有一个具有通用绑定类型的集合,定义如下:
Set<? extends BasicShape> shapes = new HashSet<>();
在我的实现中(为了这个问题),BasicShape不是抽象的。
我希望那时能够做到:
shapes.add(new BasicShape())
但我不能,编译失败:
I have verified,extends包含在内-这意味着它包括上限本身(在我的情况下为BasicShape)。
我在其他SO线程中找不到此特定问题的答案。
有人可以向我解释这种行为吗?
最佳答案
当您将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
。关于java - 了解集合内的Java绑定(bind)通用类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38552375/
10-09 00:28