【发布时间】:2019-06-15 16:15:37
【问题描述】:
我正在学习 Java 中的泛型,我正在学习协变和逆变。我理解协方差,为什么我们不能写入协方差类型。但对我来说,逆变是令人困惑的。我想知道为什么从逆变中读取总是对象类型
假设我们有以下类
Class Animal
Class Dog extends Animal
Class Tiger extends Animal
现在,考虑下面的代码
List<Animal> animals = new ArrayList<>();
List<? super Animal> contraVarianceList=animals;
animals.add(new Dog()); // Allowed
animals.add(new Tiger()); //Allowed
Animal animal = contraVarianceList.get(0); // Not allowed. Why?
我的问题是为什么我们不能从逆变列表中读取“动物”。为什么总是且唯一可以返回的“对象”?如果我们从逆变列表中读取“动物”,将会或可能出现什么问题?
【问题讨论】:
标签: java generics contravariance