我正在尝试修改下面的类,因此它的函数接受集合中的任何一个,这些集合的数据类型也是通用的,允许最大的灵活性:
public class Container<E> {
List<E> cont;
public Container() {
cont = new java.util.LinkedList<T>();
}
void add(E item) {
cont.add(item);
}
public E remove() {
return cont.remove(0);
}
void addMulti(List<E> items) {
for (E elem : items) {
cont.add(elem);
}
}
void removeMulti(int x, List<E> items) {
for (E elem : cont.subList(0, n)) {
items.add(elem);
}
for (int i=0; i<x; ++i) cont.remove(0);
}
}
我正在尝试使用通配符使List接受多种类型,例如:
List<?> //Right??
另外,addAll和removeAll函数应该接受任何类型的列表作为参数,而不仅仅是List,可能是这样的:
Collection<?> //Correct???
谢谢!
答案 0 :(得分:1)
对于addMulti
,您不希望接受Collection<?>
,因为您无法正确地说它包含与E
兼容的元素。为了最大限度地提高一般性,您可以接受Collection<? extends E>
,该集合表示该集合包含E
或E
的某些子类。
void addMulti(Collection<? extends E> items) {...}
对于removeMulti
,是的,您可以接受Collection<?>
,因为如果集合中某些元素的类型与E
不兼容,则不会删除它。< / p>
void removeMulti(int x, Collection<?> items) {...}
但是,如果您在removeMulti
中使用通配符集合,则无法添加到items
。 (我不太明白你的代码应该在那里做什么。)