java对象类型列表和扩展类型的对象列表之间的区别
我经常遇到以下情况:
List<Fooable> fooList;
vs
List<? extends Fooable> fooList;
这两者有什么区别?或者,在描述此差异的地方,是否有此/先前存在的链接的名称?我不能用谷歌搜索这个概念,因为我不知道它叫什么,或者你怎么描述它
如果Fooable是一个接口,这有关系吗?具体的课程?抽象类?这是否只适用于扩展和/或实现某些内容的类
你可以在下面搜索框中键入要查询的问题!
我经常遇到以下情况:
List<Fooable> fooList;
vs
List<? extends Fooable> fooList;
这两者有什么区别?或者,在描述此差异的地方,是否有此/先前存在的链接的名称?我不能用谷歌搜索这个概念,因为我不知道它叫什么,或者你怎么描述它
如果Fooable是一个接口,这有关系吗?具体的课程?抽象类?这是否只适用于扩展和/或实现某些内容的类
# 1 楼答案
如果没有复制品
A
List<Animal>
可以包含Cat
和Dog
。您可以将猫和狗添加到列表中。这并不意味着它只能包含Animal
s但是,如果您有一个方法
foo(List<Animal> foo)
,则不能将List<Cat>
传递给它。但是您可以将Cat
s、Dog
s或Animal
s添加到传递的List<Animal>
如果您有一个
foo(List<? extends Animal> foo)
,您可以将List<Animal>
、List<Dog>
和List<Cat>
传递给它并从中读取,即您可以访问Animal
的方法但是,由于
Animal
的任何子类型的列表都可能被传递给它(您不知道是哪种类型,它可能是Animal
、aCat
或aDog
,或者是一些完全不同的Animal
,因此不能向它添加任何元素(除了null
)