关于PECS javagenerics

阅读Java Essentials,第2版,有一个名为PECS的规则,用于方法参数中的类型安全。 如果它产生你的延伸,消耗你使用超级。 对不起,如果我定义错了,因为我没有得到它。

任何人都可以阐明Joshua Bloch所指的生产者/消费者吗?

请参阅此pdf ,其上有一系列幻灯片(搜索PECS):

通用类型是不变的

•即, List不是List的子类型
•适合编译时类型安全,但不灵活

有界通配符类型提供额外的API灵活性

ListList的子类型List List
ListList的子类型List List

所以

PECS生产商扩展,消费者超级

•使用Foo FooT生产者
•使用Foo Foo对于T消费者

仅适用于输入参数(不要将通配符类型用作返回类型)。

假设您要向Stack添加批量方法:

 void pushAll(Collection src); //src is an E producer void popAll(Collection dst); // dst is an E consumer 

当一个方法读取/迭代集合中的元素时,它就是一个消费者,当它向集合广告时,它就是一个生产者。