小编典典

是否可以在不使用任何特殊语法的情况下,将扩展了A的B类型的值添加到A类型的泛型集合中?

java

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。但是我被告知这是一个错误编译-为什么?


阅读 171

收藏
2020-11-26

共1个答案

小编典典

您的代码指定了它 接受Collection与has具有 相同 类型参数的a Stack

您应该这样编写pushAll方法:

public void pushAll (Collection<? extends E> src)

这意味着,你期望Collection某种 类型的扩展E(即你不关心它是什么具体类型,但它 必须E或某些子类的话)。

看一下的定义Collection.addAll():它的定义方式相同。

2020-11-26