Java 为什么可以';无法将对象添加到列表<;?超级数>;?
考虑以下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! 列表一个对象不是一个数字 一个数字是一个对象 这是问题的
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:为什么要投否决票?