Possible Duplicate:
what is the difference between 'super' and 'extends' in Java Generics
Java Generics WildCard Question: List<? extends A>
我发现了 Java 泛型的一种奇怪行为,我无法向自己解释。
如果我尝试以下代码,我希望它能够工作
List<? extends Number> list = new ArrayList<>();
list.add(new Integer(2));
list.add(new Float(2.0f));
但这会导致编译器错误。
如果我将第一行更改为
List<? super Number> list = new ArrayList<>();
它对于编译器来说工作得很好。
谁能给我解释一下吗? 和 有什么不一样?扩展和? super ?
最佳答案
参见《Effective Java》第二版,第 28 条:
生产者扩展,消费者 super
如果你的参数是生产者,它应该是 <? extends T>
,如果是消费者,则必须是 <? super T>
这里是消费者,所以它一定是 <? super Number>
关于java - 泛型的协方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12794440/