public class Stack<E> { public Stack () {....} public void push (E e) {....} public E pop () {....} public boolean isEmpty(){....} } public void pushAll (Collection<E> src) { for (E e: src){ push(e) } }
我不明白如果我写的话会出现什么问题
Stack<number> numberStack = new Stack<Number>(); Collection<Integer> integers=... numberStack.pushAll(integers);
整数扩展了Number,因此我可以向添加一个整数集合numberStack。但是我被告知这是一个错误编译-为什么?
numberStack
您的代码指定了它 仅 接受Collection与has具有 相同 类型参数的a Stack。
Collection
Stack
您应该这样编写pushAll方法:
pushAll
public void pushAll (Collection<? extends E> src)
这意味着,你期望Collection的 某种 类型的扩展E(即你不关心它是什么具体类型,但它 必须 是E或某些子类的话)。
E
看一下的定义Collection.addAll():它的定义方式相同。
Collection.addAll()