Java集合:List <Animal> tiger = new ArrayList <Tiger>()错误

1 java generics collections

Tiger类是从Animal Class扩展而来的.

当我宣布:List<Animal> tiger = new ArrayList<Tiger>();.我会在编译时出错.

但是,我认为这条线对多态性来说是正确的.请问谁可以帮我解释一下.

dan*_*uch 5

你不能这样做

List<Animal> tiger = new ArrayList<Tiger>();
Run Code Online (Sandbox Code Playgroud)

在java中.左边的通用类型必须是非常相等(或者可能不必相等,如果通配符在游戏中 - ? extends T或者? super T)在右边是通用类型.

如果有可能那么就不可能将新Lion的列表添加到声明为Animals的列表中- 这没有任何意义.

你能做的是:

List<Animal> tigers = new ArrayList<Animal>();
tigers.add(new Tiger());
Run Code Online (Sandbox Code Playgroud)

(Animals的所有家庭,包括Tigers)

要么:

List<? extends Animal> tigers = new ArrayList<Tiger>();
tigers.add(new Tiger()); // Adding is immpossible now - list can be read only now! 
Run Code Online (Sandbox Code Playgroud)

(只有子类Animal)- 列表现在只能读取!