繁体   English   中英

公众有什么区别 <T extends Animal> void addAll(List <T> 动物)和public void addAll(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM