public <t extends =“”animal =“”> void addAll(List <t> animals)和public void addAll(List <animal> animals)有什么区别?

时间:2016-01-26 21:07:45

标签: java generics

我对此感到有点困惑,所以我们会感激一点澄清。

public <T extends Animal> void addAll(List<T> animals)

VS

public void addAll(List<Animal> animals)

2 个答案:

答案 0 :(得分:10)

区别在于方法将接受List中的类型参数。

在第一种方法中,T可以是Animal或任何子类,因此addAll会接受List<Animal>List<Dog>或{{{ 1}}。请注意,此签名等同于

List<Cat>

当您不需要方法正文中的public void addAll(List<? extends Animal> animals) 的确切类型时。

在第二种方法中,您已指定type参数必须为Animal。 Java的泛型是不变的,因此不允许Animal的子类型。此方法将接受Animal,但不接受List<Animal>List<Dog>

答案 1 :(得分:0)

用简单的词语&#39; T&#39;是一种对象类型。所以List&#39; T&#34; type可以接受任何类型的对象,而Animal类型的List将只接受Animal类型的元素而不是任何其他对象。

这是使用Generics的优势。