![](/img/trans.png)
[英]Why can't List<? extends Animal> be replaced with List<Animal>?
[英]What is the difference between public <T extends Animal> void addAll(List<T> animals) and public void addAll(List<Animal> animals)?
我对此感到有点困惑,所以我会对此表示赞赏。
public <T extends Animal> void addAll(List<T> animals)
与
public void addAll(List<Animal> animals)
不同之处在于该方法将接受List
中的哪些类型参数。
在第一种方法中, T
可以是Animal
或任何子类,因此addAll
将接受List<Animal>
, List<Dog>
或List<Cat>
。 请注意,此签名相当于
public void addAll(List<? extends Animal> animals)
当你不需要方法体中确切类型的Animal
时。
在第二种方法中,您已指定type参数必须为Animal
。 Java的泛型是不变的,因此不允许使用Animal
子类型。 此方法将接受List<Animal>
,但不接受List<Dog>
或List<Cat>
。
简单来说,'T'是一种对象类型。 所以List'T'类型可以接受任何类型的对象,而Animal类型的List将只接受Animal类型的元素,而不接受任何其他对象。
这是使用泛型的优势。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.