首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java泛型中的读写协方差和逆变

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

Stack Overflow用户
提问于 2017-03-18 12:18:29
回答 1查看 552关注 0票数 3

虽然学习Java泛型我认识到,通过协方差,我们可以从结构中读取项目,但我们不能将任何东西写入结构,而使用逆反式,我们可以将项写入结构,但不能从结构中读取任何内容。

让我们举一个例子:

代码语言:javascript
复制
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

我不明白的是,为什么这个东西是被禁止的?如果这件事被允许发生,我无法理解什么会出错?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-18 12:26:44

您不能将Integer类的元素添加到List<? extends Number>中,因为您不知道列表中元素的确切类型。可能是List<Double>。下一个例子中的相同逻辑。您从List<? super Integer>获得的可能是Object类型,而不是Number类型。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42874317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档