【问题标题】:Does this make a difference in using generics? [duplicate]这对使用泛型有影响吗? [复制]
【发布时间】:2017-06-09 05:18:52
【问题描述】:

它们是完全相同还是用于不同的情况?

public List<? extends Object> do(){
   return ...
}

VS

public List<Object> do(){
  return...
}

【问题讨论】:

  • 前者可能返回Object的某个子类的列表。后者返回任意类的对象列表。另请参阅"List<? extends MyType>"
  • 泛型很难。 PECS 问题应该为您指明正确的方向。

标签: java generics


【解决方案1】:

这些不一样。

List&lt;? extends Object&gt; 可以是任何类型的列表。

由于您不知道列表实际包含什么类型,因此您无法将任何内容放入其中。

【讨论】:

  • 既然一切都隐含地是 Object 的子类,为什么它们不一样呢?我的意思是在这两种情况下, do() 都可以返回“所有内容”列表。不对吗?
  • @user697911 尝试使用do().add(new Object())
  • 没有。 List&lt;? extends Object&gt; 表示您不知道列表应该有什么类型;只是它是扩展Object 的任何类型。它实际上可能是List&lt;Cat&gt;,所以你不能输入Dog
  • 通配符extends 语法表示列表包含所有相同类型的引用,该类型是上限Object 的子类型。如果没有通配符 List&lt;Object&gt;,它是所有命名通用元素类型 Object 的引用列表,但每个元素可以是命名类型的不同子类型。
猜你喜欢
  • 2018-04-03
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 2022-06-25
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
相关资源
最近更新 更多