有人可以向我解释带有通配符的java泛型中的extends和super之间的区别吗?
我已阅读相关帖子,但未完全理解。如果你能用实时的例子向我解释那对我有很大的帮助。
PECS(你扩展的制作人,消费你使用超级)是什么意思?
答案 0 :(得分:3)
如果您有A,B和C类
A延伸B
和
B延伸C
然后
A和B匹配:
?延伸B
和
B和C匹配:
?超级B
答案 1 :(得分:1)
类型参数<?延伸T>表示T或T的任何子类。
类型参数<?超级T>表示T或T的任何超类。
例如:
在 Effective Java 中,Joshua Bloch建议使用助记符 PECS - “Producer-Extends,Consumer-Super”。
“如果参数化类型代表T生产者,请使用
<? extends T>
; 如果它代表T消费者,请使用<? super T>
。“
这也被Maurice Naftalin和Philip Wadler所知,来自 Java Generics 的获取和放置原则。
“只有从结构中获取值时使用
extends
通配符,当您只将值放入时,请使用super
通配符一个结构,当两者获取和放置时,不要使用通配符。“