我有以下课程
public class Animal
public class Dog extends Animal
public class Cat extends Animal
对于测试,我有一个驱动程序类。
public class Driver {
public static void main(String[] args){
List<? extends Animal> animalList = Arrays.<Dog>asList(new Dog(), new Dog(), new Dog());
animalList.add(new Dog()) // Compilation error
}
}
默认情况下,列表是不变类型的容器。例如,假设我们有List<Object> objectList
,ArrayList<String> stringList
我们不能将 stringList 替换为 objList。这将导致编译错误
我的尝试是像在 Driver 类中一样使列表协变。
根据<? extends Animal>
我们可以应用任何属于 Animal 子类型的对象,包括 Animal 类型。
但是我在指示的行中遇到了编译问题。有人可以从理论上解释我哪里出错了。