我对此感到有点困惑,所以我们会感激一点澄清。
public <T extends Animal> void addAll(List<T> animals)
VS
public void addAll(List<Animal> animals)
答案 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)
这是使用Generics的优势。