0

这是一个家庭作业问题:

我有一个通用类定义如下:

public class PriorityQueue<T extends Comparable<T>> {
    ArrayList<T> queue; 

public PriorityQueue(){
    queue = new ArrayList<>();
}

void add(T t){
    queue.add(t);
    Collections.sort(queue);
}

<T extends Comparable<T>> T remove(){
    T t = queue.get(0);
    queue.remove(t);
    return t;
}
}

但 NetBeans 在该行显示以下错误(红色下划线)T t = queue.get(0)

incompatible types
required: T#2
found:    T#1
where T#1,T#2 are type-variables:
T#1 extends Comparable<T#1> declared in class PriorityQueue
T#2 extends Comparable<T#2> declared in method <T#2>remove()

似乎不知何故,T我在方法声明中所指的类型与类的类型参数中所指的类型相同。我猜这是某种语法问题。

我还想知道我是不是把事情复杂化了——如果我简单地用T remove() {. 这可以正确编译,但是当我尝试使用驱动程序类对其进行测试时,如下所示:

    PriorityQueue pq = new PriorityQueue<Integer>();

    int a = 10;
    int b = 12;
    int c = 5; 
    int d = 9;

    pq.add(a);
    pq.add(b);
    pq.add(c);
    pq.add(d);

    Integer i = pq.remove();

我得到错误:

Incompatible types: 
required: Integer 
found:    Comparable

在线上Integer i = pq.remove();

可能很明显,我只是在学习如何使用泛型。请帮助我了解我在哪里出错了。

4

1 回答 1

3

改变

PriorityQueue pq = new PriorityQueue<Integer>();

PriorityQueue<Integer> pq = new PriorityQueue<Integer>();

删除方法应该是

T remove() {
...
于 2013-05-13T02:51:38.330 回答