我创建了一个包含QueueItem
个对象的优先级队列。但即使我已在getPriority()
课程中实施了QueueItem
,它仍会在cannot resolve method getPriority()
课程的insert()
方法中显示PriorityQueue
。
这是我的PriorityQueue
课程:
public class PriorityQueue<QueueItem> implements Iterator<QueueItem> {
private int maxSize;
private int size;
private Map<Integer, List<QueueItem>> pq;
public PriorityQueue(int maxSize) {
if (maxSize < 0) throw new IllegalArgumentException();
this.maxSize = maxSize;
pq = new HashMap<Integer, List<QueueItem>>();
}
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public void insert (QueueItem item) {
int priority = item.getPriority(); //here is where the problem occured
// pq.get(priority)
}
}
这是我的QueueItem
课程:
public class QueueItem implements Comparable{
private int priority;
private Object value;
public QueueItem() {
priority = -1;
value = null;
}
public QueueItem(int priority, Object value) {
this.priority = priority;
this.value = value;
}
public int getPriority() {
return priority;
}
public Object getValue() {
return value;
}
public int compareTo(Object o) {
if (!(o instanceof QueueItem)) throw new ClassCastException();
if (((QueueItem)o).getPriority() == -1) throw new NullPointerException();
return priority - ((QueueItem) o).getPriority();
}
}
如您所见,方法getPriority()
只返回整数优先级。
如果有人能指出我所犯的错误,我提前感谢。感谢。
答案 0 :(得分:2)
OH。它正盯着我看。
public class PriorityQueue<QueueItem> implements Iterator<QueueItem> {
// ^^^^^^^^^^^
您在这里声明了一个类型变量,其名称与类QueueItem
相同,后者会隐藏它。
所以我想你只想删除它:
public class PriorityQueue implements Iterator<QueueItem> {
如果您希望PriorityQueue
是通用的,那么我不确定您需要做什么来解决它。也许你会想要这样的东西:
public class PriorityQueue<E> implements Iterator<QueueItem<E>> {
...
private Map<Integer, List<QueueItem<E>>> pq;
...
}
public class QueueItem<E> implements Comparable<QueueItem<E>> {
...
private E value;
...
}
作为旁注,请使用原始类型Comparable
isn't good。即使使用非通用class QueueItem
,您也应该implements Comparable<QueueItem>
。