我明白了“?扩展E“意味着可以添加所有 集合的成员,其中包含任何类型的元素,即E的子类型。 因此对于List,addAll(List的所有值)将保持良好状态。 但是,根据Get和Put原则,为什么推广“当你只从结构中获取值时使用扩展通配符”?
答案 0 :(得分:1)
当您从参数addAll
Collection
时,您已经"得到" Collection
参数中的所有元素,并将它们添加到另一个集合中。因此"制作人扩展(消费者超级)"仍然适用于此。
通过强制执行通用<? extends E>
,我们确保参数中的所有元素均为instanceof E
,因此可以成功添加到Collection<E>
。