任何集合类型的列表,也具有通用数据类型

时间:2014-11-21 00:50:12

标签: java list object generics

我正在尝试修改下面的类,因此它的函数接受集合中的任何一个,这些集合的数据类型也是通用的,允许最大的灵活性:

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???

谢谢!

1 个答案:

答案 0 :(得分:1)

对于addMulti,您不希望接受Collection<?>,因为您无法正确地说它包含与E兼容的元素。为了最大限度地提高一般性,您可以接受Collection<? extends E>,该集合表示该集合包含EE的某些子类。

void addMulti(Collection<? extends E> items) {...}

对于removeMulti,是的,您可以接受Collection<?>,因为如果集合中某些元素的类型与E不兼容,则不会删除它。< / p>

void removeMulti(int x, Collection<?> items) {...}

但是,如果您在removeMulti中使用通配符集合,则无法添加到items。 (我不太明白你的代码应该在那里做什么。)

这是定义Collection#addAllCollection#removeAll的方式。