阅读Java Essentials,第2版,有一个名为PECS的规则,用于方法参数中的类型安全.如果它产生你的延伸,消耗你使用超级.对不起,如果我定义错了,因为我没有得到它.
任何人都可以阐明Joshua Bloch所指的生产者/消费者吗?
请参阅此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
Run Code Online (Sandbox Code Playgroud)