Java 为什么可以';无法将对象添加到列表<;?超级数>;?

Java 为什么可以';无法将对象添加到列表<;?超级数>;?,java,list,wildcard,type-erasure,lower-bound,Java,List,Wildcard,Type Erasure,Lower Bound,考虑以下Java代码: List<? super Number> list = new ArrayList<>(); Number n = new Integer(1); Object o = new Object(); list.add(n); // works, apparently Number super Number is alright list.add(o); // compiler error! 列表一个对象不是一个数字 一个数字是一个对象 这是问题的

考虑以下Java代码:

List<? super Number> list = new ArrayList<>();
Number n = new Integer(1);
Object o = new Object();
list.add(n); // works, apparently Number super Number is alright
list.add(o); // compiler error! 

列表一个
对象
不是一个
数字

一个
数字
是一个
对象

这是问题的副本:

因此,不能将任何超类型的数字添加到 列表这根本不是有界通配符和 捕获转换工作。您没有声明列表 因为您可能想要向其中添加对象(您不能!);是吗 因为您想向其添加数字对象(即,它是“消费者”) 简单地说,列表限制太多


对象
不是
数字

一个
数字
是一个
对象

这是问题的副本:

因此,不能将任何超类型的数字添加到 列表这根本不是有界通配符和 捕获转换工作。您没有声明列表 因为您可能想要向其中添加对象(您不能!);是吗 因为您想向其添加数字对象(即,它是“消费者”) 简单地说,列表限制太多


编译器只知道
列表
包含一些
数字
(或
数字
本身)的超类型,它们可能是也可能不是
对象
。因此它必须禁止
对象
,因为它可能是
列表


这里有一个,向下滚动大约一半,其中谈到了“?super”。

编译器只知道
列表
包含一些
编号
(或
编号
本身)的超类型,可能是
对象,也可能不是
对象。因此它必须禁止
对象
,因为它可能是
列表


这里有一个,向下滚动大约一半的地方,它谈到了“?super”。

列表这个确切的例子甚至在那个问题中使用过……这个确切的例子甚至在那个问题中使用过……谢谢,在仔细思考并阅读了链接后,我明白了。@downvoter:投反对票的原因是什么?谢谢,在仔细考虑并阅读了链接之后,我得到了它。@downvoter:为什么要投否决票?