2013-12-12 54 views
5

我有一个任务,需要我从头开始实现通用优先级队列,但是我收到了一个我认为没有任何意义的错误。如何将通用项目添加到通用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

你不需要

<E extends Comparable<E>> 

INT他的例子。你已经在类级别声明了它,所以你不需要方法声明中的类型参数。

你可以只声明

public void insert(E newItem){ 

那么它将编译。

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

更改第一 'E' 到 'T',因为类型参数隐藏原来的 'E'

+0

为什么要添加一个你永远不会使用的类型参数? – ILMTitan

3

在PriorityQueue中,所有项目必须具有可比性。因此,你必须把相当的克制类本身

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

一旦你这样做,你需要从你的方法删除类型参数,因为它只是隐藏了您的正确的限制类类型paramemter。

public void insert(E newItem) { 
    ... 

P.S. 你想Comparable<? super E>,因为你想要最常用的约束,将允许所有项目(E)相互比较。

相关问题