为什么Java说"无法解析方法getPriority()"当我已经实现了这个方法?

时间:2016-04-13 02:05:14

标签: java

我创建了一个包含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()只返回整数优先级。

如果有人能指出我所犯的错误,我提前感谢。感谢。

1 个答案:

答案 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>