Java泛型中的读写协方差和逆变换

Java泛型中的读写协方差和逆变换,java,generics,Java,Generics,当我知道协方差时,我们可以从一个结构中读取项目,但我们不能在其中写入任何内容;反之,我们可以将项目写入一个结构中,但我们不能从中读取任何内容 让我们举一个例子: List<? extends Number> myNums = new ArrayList<Integer>(); myNums.add(45L); // Covariance - compiler error List<? super Integer> myNums = new ArrayList&

当我知道协方差时,我们可以从一个结构中读取项目,但我们不能在其中写入任何内容;反之,我们可以将项目写入一个结构中,但我们不能从中读取任何内容

让我们举一个例子:

List<? extends Number> myNums = new ArrayList<Integer>();
myNums.add(45L); // Covariance - compiler error
List<? super Integer> myNums = new ArrayList<Integer>();
myNums.add(1);
Number myNum = myNums.get(0); //Contravariance - compiler-error

List您不能将
Integer
类的元素添加到
ListnewArrayList需要是新的arraylist这是关于协方差可能出现的问题:实际上,您链接的文章正好解释了这个问题。关于这些解释,您有什么具体的问题吗?您自己的代码也显示了这一点。它尝试向列表中添加一个长(45L)。如果允许,列表将不再是类型安全的,因为您将在列表中存储Long。