关于PECS javagenerics
阅读Java Essentials,第2版,有一个名为PECS的规则,用于方法参数中的类型安全。 如果它产生你的延伸,消耗你使用超级。 对不起,如果我定义错了,因为我没有得到它。
任何人都可以阐明Joshua Bloch所指的生产者/消费者吗?
请参阅此pdf ,其上有一系列幻灯片(搜索PECS):
通用类型是不变的
•即, List
不是List
的子类型
•适合编译时类型安全,但不灵活
有界通配符类型提供额外的API灵活性
• List
是List extends Object>
的子类型List extends Object>
List extends Object>
• List
是List super String>
的子类型List super String>
List super String>
所以
PECS – 生产商扩展,消费者超级
•使用Foo extends T>
Foo extends T>
为T
生产者
•使用Foo super T>
Foo super T>
对于T
消费者
仅适用于输入参数(不要将通配符类型用作返回类型)。
假设您要向Stack添加批量方法:
void pushAll(Collection extends E> src); //src is an E producer void popAll(Collection super E> dst); // dst is an E consumer
当一个方法读取/迭代集合中的元素时,它就是一个消费者,当它向集合广告时,它就是一个生产者。