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);
Integer 扩展了 Number,因此我可以将整数集合添加到 numberStack
中。
但我被告知这是一个错误编译 - 为什么?
最佳答案
您的代码指定它仅接受与Stack
具有相同类型参数的Collection
。
您应该像这样编写 pushAll
方法:
public void pushAll (Collection<? extends E> src)
这意味着您期望某些类型的Collection
扩展E
(即您不关心它是什么特定类型,但它必须是E
或其某些子类型)。
查看 Collection.addAll()
的定义:它的定义方式相同。
关于java - 我可以添加到扩展 A 的类型 B 的类型 A 值的通用集合中,而不需要任何特殊语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7254820/