Josh Bloch的助记符 PECS 在这里很有用。它代表:
生产者
extends,消费者
super
这意味着,当一个参数化的类型被传递给的方法将 产生 的实例
T(它们将从它以某种方式被检索),
? extendsT应该被使用,因为子类的任意实例
T也是
T。
当将参数化类型传递给方法时,将 使用的 实例
T(它们将被传递给该方法以执行某些操作),
? superT因为应将的实例
T合法地传递给接受某些超类型的任何方法
T。例如,
Comparator<Number>可以在上使用
Collection<Integer>。
?extends T将无法正常工作,因为
Comparator<Integer>不能对进行操作
Collection<Number>。
编辑: 要澄清更多关于获取/放置(生产/消费):
public T something(); ^
以上是产生的方法
T。
public void something(T t);^
上面是消耗的方法
T。
“生产者
extends,消费者
super”适用于如何将参数化对象传递给该对象的方法。对于
Collections.max(),将从中检索项目
Collection,因此它是生产者。这些项目将作为参数传递给on上的方法
Comparator,因此它是使用者。



