(我在这里假设
Bar和
Baz都是的子类型
Foo。)
List<? extends Foo>表示 某种类型的元素的列表,这是Foo的子类型,但我们不知道哪种类型 。此类列表的示例为a
ArrayList<Foo>,a
linkedList<Bar>和a
ArrayList<Baz>。
由于我们不知道哪个子类型是类型参数,因此无法将
Foo对象
Bar或
Baz对象放入其中。但是我们仍然知道type参数是的子类型
Foo,因此列表中已经存在的每个元素(可以从列表中获取)都必须是一个
Foo对象,因此我们可以使用
Foo f = list.get(0);类似的东西。
这样的列表只能用于将元素从列表中取出,而不能用于添加任何元素(除了
null,但我不知道编译器是否实际上允许这样做)。
甲
List<Foo>另一方面允许添加任何对象,它是一个
Foo对象-
与作为
Bar和
Baz是的亚型
Foo,所有
Bar和
Baz对象是
Foo对象,所以它们可以被添加,太。



