Jon*_*eet 153
考虑一堆香蕉.这是Collection<? extends Fruit>因为它是一个特定的一种水果的集合-但你不知道(从该声明)什么样的水果是集合.你可以从它得到一个项目,并知道它肯定会是一个水果,但你不能添加它 - 你可能会尝试添加一个苹果到一堆香蕉,这肯定是错误的.您可以添加null它,因为这将是任何类型的水果的有效值.
现在考虑一个水果碗.这是一个Collection<? super Banana>,因为它是"大于"某种类型的集合Banana(例如,Collection<Fruit>或Collection<TropicalFruit>).你绝对可以添加一个香蕉,但如果你从碗里拿一个东西你不知道你会得到什么 - 它可能不是香蕉.所有你肯定知道它将是一个有效的(可能null)Object参考.
(一般来说,对于Java泛型问题,Java泛型常见问题解答是一个很好的资源,其中包含几乎所有与泛型有关的答案,你可能会把它抛出来.)