为什么addAll(Collection <! - ?extends E - >)用于将元素放入集合中,而通配符扩展通常建议用于Get?

时间:2017-04-06 13:37:11

标签: java generics extends

我明白了“?扩展E“意味着可以添加所有 集合的成员,其中包含任何类型的元素,即E的子类型。 因此对于List,addAll(List的所有值)将保持良好状态。 但是,根据Get和Put原则,为什么推广“当你只从结构中获取值时使用扩展通配符”?

1 个答案:

答案 0 :(得分:1)

当您从参数addAll Collection时,您已经&#34;得到&#34; Collection参数中的所有元素,并将它们添加到另一个集合中。因此&#34;制作人扩展(消费者超级)&#34;仍然适用于此。

通过强制执行通用<? extends E>,我们确保参数中的所有元素均为instanceof E,因此可以成功添加到Collection<E>