我对此有点困惑,所以稍微澄清将不胜感激。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)
我对此有点困惑,所以稍微澄清将不胜感激。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>
。请注意,当你不需要在方法体的Animal
确切类型此签名相当于
public void addAll(List<? extends Animal> animals)
。
在第二种方法中,您已指定类型参数必须是Animal
。 Java的泛型是不变的,所以不会允许Animal
的子类型。此方法将接受List<Animal>
,但不接受List<Dog>
或List<Cat>
。
简单的说'T'是一个对象类型。所以榜“T”型可以接受任何类型的对象,而类动物的名单将只动物类型的元素,而不是任何其他对象。
这是一个使用泛型的优势。
感谢您的答复,我在我的脑海里也有类似的答案,并且需要确保它是正确的。 – secret