可能重复:
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<>();
它适用于编译器。
任何人都可以向我解释一下吗? 有什么区别?延伸和?超级?
答案 0 :(得分:1)
参见Effective Java 2nd Edition,Item 28:
Producer extends,Consumer super
如果您的参数是生产者,那么它应该是<? extends T>
,如果它是消费者,则必须是<? super T>
这是消费者,所以它必须是<? super Number>