【问题标题】:What does the method below mean in terms of generics?下面的方法在泛型方面是什么意思?
【发布时间】:2020-08-30 00:38:56
【问题描述】:

我想知道下面方法的声明是什么意思:

<T> T method(List<? extends T>) {...}

如果List&lt;? extends T&gt;变成List&lt;T&gt;,这个方法会不会一样?如果不是,为什么?

【问题讨论】:

  • List&lt;? extends T&gt; 表示任何拥有T 子类类型的List。其中List&lt;T&gt; 是不言自明的。
  • 感谢您的回答,但我真的很困惑,因为我没有找到使用 List 扩展到 List (忽略任何类型的实现)。
  • Pedro Henrique Silva Almeida 尝试阅读我的答案,看看它是否有助于您解释 herehere 的概念

标签: java


【解决方案1】:

&lt;T&gt; T method(List&lt;? extends T&gt;) {...} 表示此方法可以接受满足此条件的ObjectList&lt;? extends T&gt; 其中? 表示是-A T 的子类。

注意: List&lt;T&gt;List&lt;? extends T&gt;List&lt;? super E&gt;List&lt;Integer&gt;List&lt;Car&gt; 都是个体对象。 (是的,List 是一个容器(数据结构),它进一步包含其泛型类型的一对多对象,即上面的T, E, Integer, Car 等)

礼仪示例:

假设你有一个类结构:

class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}

那么你就有了一个接受容器(数据结构)的方法,比如

public void updatePets (List<Animal> myPetsList) {}

当你尝试传递List&lt;Dog&gt; 时,你会得到一个编译错误。不允许。 因为 object -> List&lt;Dog&gt;object -> List&lt;Animal&gt; 不同。但是,object -> List&lt;Dog&gt; 可以与 object -> List&lt;? extends Animal&gt; 相同。不要将AnimalList&lt;Animal&gt; 混淆为相同的对象。这是两种不同类型的对象;一个是用户定义的,而另一个由 Java lang List 定义,指定它可以容纳的通用对象类型。

所以你的固定方法签名会变成:

public void updatePets (List<? extends Animal> myPetsList) {}

【讨论】:

  • 谢谢你的回答,我明白什么是真正的意思了。我真的很感激。
猜你喜欢
  • 1970-01-01
  • 2020-12-04
  • 2010-10-29
  • 2020-06-08
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多