有人可以用通配符向我解释 Java 泛型中扩展和超级之间的区别吗?
我已阅读相关帖子并没有完全理解。如果你能用实时的例子来解释我,那对我会有很大的帮助。
PECS(生产者你扩展,消费你使用超级)是什么意思?
有人可以用通配符向我解释 Java 泛型中扩展和超级之间的区别吗?
我已阅读相关帖子并没有完全理解。如果你能用实时的例子来解释我,那对我会有很大的帮助。
PECS(生产者你扩展,消费你使用超级)是什么意思?
如果您有 A、B 和 C 类,其中
A 扩展 B
和
B 扩展 C
然后
A和B匹配:
? 扩展 B
和
B和C匹配:
? 超级乙
类型参数 <? extends T> 表示 T 或 T 的任何子类。
类型参数 <? super T> 表示 T 或 T 的任何超类。
例如:
在Effective Java中,Joshua Bloch 推荐了助记符PECS——代表“Producer-Extends, Consumer-Super”。
“如果参数化类型代表 T 生产者,则使用
<? extends T>
;如果它代表 T 消费者,则使用<? super T>
。”
这也称为Get 和 Put 原则,来自Maurice Naftalin 和 Philip Wadler 的Java Generics。
“
extends
当你只从结构中获取值时使用super
通配符,当你只将值放入结构时使用通配符,当你同时获取和放置时不要使用通配符。”