我对此感到有点困惑,所以我会对此表示赞赏.
public <T extends Animal> void addAll(List<T> animals)
Run Code Online (Sandbox Code Playgroud)
与
public void addAll(List<Animal> animals)
Run Code Online (Sandbox Code Playgroud)
rge*_*man 10
不同之处在于该List方法将接受哪些类型参数.
在第一种方法中,T可以是Animal或任何子类,因此addAll将接受a List<Animal>,a List<Dog>或a List<Cat>.请注意,此签名相当于
public void addAll(List<? extends Animal> animals)
Run Code Online (Sandbox Code Playgroud)
当你不需要Animal方法体中的确切类型时.
在第二种方法中,您已指定type参数必须为Animal.Java的泛型是不变的,因此不允许任何子类型Animal.此方法将接受a List<Animal>,但不接受a List<Dog>或a List<Cat>.