关于PECS java泛型

时间:2010-12-26 23:55:05

标签: java generics

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

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

2 个答案:

答案 0 :(得分:8)

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

通用类型不变

•也就是说,List<String>不是List<Object>的子类型 •适合编译时类型安全,但不灵活

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

List<String>List<? extends Object>的子类型 •List<Object>List<? super String>

的子类型

所以

PECS - 制片人延伸,消费者超级

•对Foo<? extends T>制片人使用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

答案 1 :(得分:3)

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