虽然学习Java泛型我认识到,通过协方差,我们可以从结构中读取项目,但我们不能将任何东西写入结构,而使用逆反式,我们可以将项写入结构,但不能从结构中读取任何内容。
让我们举一个例子:
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我不明白的是,为什么这个东西是被禁止的?如果这件事被允许发生,我无法理解什么会出错?
发布于 2017-03-18 12:26:44
您不能将Integer类的元素添加到List<? extends Number>中,因为您不知道列表中元素的确切类型。可能是List<Double>。下一个例子中的相同逻辑。您从List<? super Integer>获得的可能是Object类型,而不是Number类型。
https://stackoverflow.com/questions/42874317
复制相似问题