不了解<t>和<! - ? - > </t>

时间:2014-09-24 06:19:23

标签: java generics

例如我有一个班级

class Element {}

我有一些课程正在扩展这门课程

class ExtraElement extends Element {}

那么这些陈述是一样的吗?

List<Element> list & List<? extends Element>

因为据我所知wildcards定义了一系列类。在这两个语句中,我可以传递任何扩展类Element的元素,所以基本上是Element类的族。

2 个答案:

答案 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 MangoApple等,这些是Fruits
  • 的子类
  • 但在List<Mango>中,您无法在此处添加Apple,因为List<? extends Fruits> ? MangoList<Mango extends Fruits>,所以它是{{1}}。