例如我有一个班级
class Element {}
我有一些课程正在扩展这门课程
class ExtraElement extends Element {}
那么这些陈述是一样的吗?
List<Element> list & List<? extends Element>
因为据我所知wildcards
定义了一系列类。在这两个语句中,我可以传递任何扩展类Element
的元素,所以基本上是Element
类的族。
答案 0 :(得分:5)
不,他们不一样。
List<? extends Element>
可以是List<ExtraElement>
,也可以是List<Element>
,但编译器无法知道它是哪一个。
如果是List<ExtraElement>
,则无法在列表中添加SomeNonExtraElement
(但您可以在SomeNonExtraElement
中添加List<Element>
)。
为了强制执行此操作,编译器不允许您将任何添加到List<? extends Something>
。
答案 1 :(得分:1)
List<Fruits> AND List<? extends Fruits>
List<Fruits>
:在此列表中,您可以添加任何Fruit
Say Mango
,Apple
等,这些是Fruits
List<Mango>
中,您无法在此处添加Apple
,因为List<? extends Fruits>
?
Mango
是List<Mango extends Fruits>
,所以它是{{1}}。