什么是PECS(生产者延伸消费者超级)?

问题:

在阅读泛型时,我遇到了PECS(Producer extends and Consumer super的缩写)。
有人可以向我解释如何使用PECS来解决extendssuper之间的混乱

回答:

 TL;博士:“PECS”来自收藏的观点。如果您only从通用集合中提取项目,则它是制作人员,您应该使用extends;如果您是only填写项目,则是消费者,您应该使用super。如果您同时使用相同的集合,则不应使用extendssuper
假设你有一个方法作为它的参数集合的东西,但你希望它比只接受一个Collection<Thing>更灵活,
 案例1:你想要通过收集和做每件事情。
那么列表是制片人,所以你应该使用Collection<? extends Thing>
推理是,Collection<? extends Thing>可以容纳Thing的任何子类型,因此,当您执行操作时,每个元素将表现为Thing。 (您实际上无法向Collection<? extends Thing>添加任何内容,因为您在运行时无法知道该集合拥有Thingspecific子类型。)
 情况2:您要将东西添加到集合中。
那么列表是消费者,所以你应该使用Collection<? super Thing>
这里的推理是,不像Collection<? extends Thing>,不管实际的参数化类型是什么,Collection<? super Thing>可以始终保持Thing。在这里,只要允许添加Thing,就不在乎列表中已有的内容。这就是? super Thing的保证。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What is PECS (Producer Extends Consumer Super)?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

4 + 2 =