【问题标题】:Difference between a list of object types and a list of objects extending a type [duplicate]对象类型列表和扩展类型的对象列表之间的区别[重复]
【发布时间】:2017-02-26 22:11:12
【问题描述】:

我经常遇到这样的情况:

List<Fooable> fooList;

List<? extends Fooable> fooList;

这两者有什么区别?或者是否有描述这种差异的这个/预先存在的链接的名称?我无法在 Google 上搜索这个概念,因为我不知道它叫什么,也不知道你会如何描述它。

Fooable 是否是一个接口有关系吗?一个具体的类?一个抽象类?这是否仅适用于扩展和/或实现某些东西的类?

【问题讨论】:

标签: java oop arraylist interface extends


【解决方案1】:

如果没有重复的话……

List&lt;Animal&gt;可以包含Cats 和Dogs。您可以将猫和狗添加到列表中。这并不意味着它只能包含Animals。

但是如果你有一个方法foo(List&lt;Animal&gt; foo),你不能传递一个List&lt;Cat&gt;给它。但是您可以在传递的List&lt;Animal&gt; 中添加Cats、Dogs 或Animals。

如果您有foo(List&lt;? extends Animal&gt; foo),您可以将List&lt;Animal&gt;List&lt;Dog&gt;List&lt;Cat&gt; 传递给它并从中读取,即您可以访问Animals 方法。

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

【讨论】:

  • 是任意限制吗?我会假设 foo(List&lt;Animal&gt; foo) 会接受 List&lt;Cat&gt; 因为猫是动物
  • 所以基本上,答案是 Java 的泛型以一种非常违反直觉的方式工作。
  • 另外,我找到了duplicate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 2013-05-19
  • 2017-07-16
  • 2023-01-09
  • 2014-06-18
  • 2015-03-31
  • 1970-01-01
相关资源
最近更新 更多