我有一个任务,要求我从头开始实现一个通用优先级队列,但是我收到一个我认为没有任何意义的错误。
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
}
}
}
答案 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)相互比较。