0

我有一个 LinkedList 类,它作为 Queue 类的基础,它作为 PrintQueue 类的基础。

这是我的 PrintQueue 类:

public class PrintQueue<T> {
    private Queue<T> queue;

    public PrintQueue() {
        queue = new Queue<T>();
    }

    public void lpr(String owner, int jobID) {
        queue.enqueue(new Job(owner, jobID));
    }
}

从底部开始的queue.enqueue(...)三行导致错误:

Queue 类型中的方法 enqueue(T) 不适用于参数 (Job)

PrintQueue 是 Job 对象的队列。

我的 Queue 类中的 enqueue 方法如下所示:

    public void enqueue(T item) {
        queue.addToEnd(item);
    }

addToEnd 方法如下所示:

public void addToEnd(T item) {
    Node<T> itemnode = new Node<T>(item, null); 

    if (isEmpty()) {
        head = itemnode;
    }
    else {
        Node<T> curr = head;

        while (curr.getNext()!=null) {
            curr= curr.getNext();
        }

        curr.setNext(itemnode);
    }

    count++;

}

为什么这不起作用?所有三个类(PrintQueue、Queue 和 LinkedList)都是通用类。

4

3 回答 3

2

您正在尝试Queue<T>为某种任意类型创建一个T- 但随后您正在尝试将一个Job.

例如,您认为将 a 排入队列意味着Job什么Queue<String>

真的需要PrintQueue通用吗?我怀疑你只是想要:

public class PrintQueue {
    private final Queue<Job> queue;

    public PrintQueue() {
        queue = new Queue<Job>();
    }

    public void lpr(String owner, int jobID) {
        queue.enqueue(new Job(owner, jobID));
    }
}

Queue(此外,当内置类库中有各种好的队列时,不清楚为什么你有自己的类……那些也没有 O(N)“添加到末尾”行为的队列。 ..)

于 2012-10-15T18:41:54.593 回答
0

正如你所说,你的方法是:

public void enqueue(T item) {
    queue.addToEnd(item);
}

请查看参数类型,即T. 请确保参数类Job也是通用的。完成后,将您的enqueue方法称为:

 queue.enqueue((T)(new Job(owner, jobID)));
于 2012-10-15T18:48:02.627 回答
0

为了避免混淆,我看到 Queue 是一个自定义类而不是 java.util.Queue 接口。

我强烈建议您实现 java.util.Queue 而不是重新发明轮子。它仅适用于方法:element(),peek(),poll(), offer(E) and remove().

接口队列

于 2012-10-15T18:48:57.987 回答