这是一个家庭作业问题:
我有一个通用类定义如下:
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();
可能很明显,我只是在学习如何使用泛型。请帮助我了解我在哪里出错了。