第一个说是“是E的祖先的某种类型”。第二个说是“某种类型,它是E的子类”。(在两种情况下,
E本身都可以。)
因此,构造函数使用该?
extends E形式,以确保在从集合中获取值时,它们将全部为E或某个子类(即,它是兼容的)。该
drainTo方法试图将值放入集合中,因此集合必须具有
E或超类的元素类型。
例如,假设你有一个这样的类层次结构:
Parent extends ObjectChild extends Parent
和一个
linkedBlockingQueue<Parent>。你可以构造一个传入的,以
List<Child>安全地复制所有元素,因为每个元素Child都是父元素。你无法传入,
List<Object>因为某些元素可能与不兼容Parent。
同样,你可以将队列排入
a,
List<Object>因为每个队列
Parent都是
Object...,但是你不能将其排入a,
List<Child>因为
List<Child>期望所有元素都与兼容
Child。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)