对象类型列表和扩展类型的对象列表之间的区别

Difference between a list of object types and a list of objects extending a type

我经常遇到这样的情况:

List<Fooable> fooList;

List<? extends Fooable> fooList;

这两者有什么区别?或者是否有这个/预先存在的名称 link 描述了这种差异?我不能 Google 这个概念,因为我不知道它叫什么,也不知道你怎么描述它。

Fooable 是一个接口重要吗?具体的class?摘要class?这是否仅适用于 class 扩展 and/or 实现的东西?

好吧,如果没有重复...

一个List<Animal>可以包含CatDog。您可以将猫狗添加到列表中。不代表只能包含Animals.

但是如果你有一个方法foo(List<Animal> foo),你不能传递一个List<Cat>给它。但是您可以将 Cats、Dogs 或 Animals 添加到传递的 List<Animal>

如果你有一个foo(List<? extends Animal> foo),你可以传递一个List<Animal>List<Dog>List<Cat>给它并从中读取,即你可以访问Animals 方法。

但是由于 Animal 的任何子类型列表都可能传递给它(您不知道是哪种类型,它可能是 AnimalCatDog,或者一些完全不同的Animal,你不能向它添加任何元素(除了null)。