我经常会遇到以下情况:
List<Fooable> fooList;
VS
List<? extends Fooable> fooList;
这两者有什么区别?或者是否存在此/已存在链接的名称,其中描述了这种差异?我不能谷歌这个概念,因为我不知道它被称为什么,或者你怎么形容这个。
如果Fooable是一个接口,这有关系吗?一个具体的课程?一个抽象类?这仅适用于扩展和/或实现某些内容的类吗?
答案 0 :(得分:1)
好吧,如果没有重复......
List<Animal>
可以包含Cat
和Dog
s。您可以将猫和狗添加到列表中。这并不意味着它只能包含Animal
s。
但是如果您有方法foo(List<Animal> foo)
,则无法将List<Cat>
传递给它。但您可以将Cat
,Dog
或Animal
添加到已通过的List<Animal>
。
如果您有foo(List<? extends Animal> foo)
,则可以将List<Animal>
,List<Dog>
和List<Cat>
传递给它并从中读取,即您可以访问{{1}方法。
但是因为Animal
的任何子类型列表都可以传递给它(您不知道哪种类型,可能是Animal
,Animal
或{{1 }或者一些完全不同的Cat
,你不能添加任何元素(Dog
除外)。