如何将通用项添加到通用ArrayList?

时间:2013-12-12 07:07:50

标签: java generics arraylist

我有一个任务,要求我从头开始实现一个通用优先级队列,但是我收到一个我认为没有任何意义的错误。

public class PriorityQueue<E> {
     private ArrayList<E> items = new ArrayList<E>(0);
     ...
     public <E extends Comparable<E>> void insert(E newItem){

       if(numOfItems == 0){
          items.add(newItem); //ERROR: The method add(E) in the type ArrayList<E> 
                                       is not applicable for the arguments (E)
          rear++;
          numOfItems++;
       }else{
            //INCOMPLETE
       }
    }
}

3 个答案:

答案 0 :(得分:4)

public <T extends Comparable<E>> void insert(E newItem){

将第一个'E'更改为'T',因为type参数隐藏了原始的'E'

答案 1 :(得分:3)

您不需要

<E extends Comparable<E>>

在他的实例中。您已经在类级别声明它,因此您不需要方法声明中的type参数。

你可以宣布

 public void insert(E newItem){

然后它将编译。

答案 2 :(得分:3)

在PriorityQueue中,所有项目必须具有可比性。因此,你必须在课堂上设置类似的限制

public class PriorityQueue<E extends Comparable<? super E>> {
    ...

完成后,您需要从方法中删除type参数,因为它只隐藏正确约束的类类型参数。

    public void insert(E newItem) {
    ...

P.S。 您需要Comparable<? super E>,因为您需要最常用的约束,以便将所有项目(E&#39; s)相互比较。