【问题标题】:Covariance of generics [duplicate]泛型的协方差
【发布时间】:2012-09-29 10:54:12
【问题描述】:

可能重复:
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<>();

它对编译器工作正常。

谁能给我解释一下? 和有什么区别?扩展?超级

【问题讨论】:

标签: java generics


【解决方案1】:

参见 Effective Java 第 2 版,第 28 条:

生产者扩展,消费者超级

如果你的参数是生产者,它应该是&lt;? extends T&gt;,如果是消费者,它必须是&lt;? super T&gt;

这里是消费者,所以它必须是&lt;? super Number&gt;

【讨论】:

    猜你喜欢
    • 2020-11-20
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    相关资源
    最近更新 更多