我有一个LinkedList类,它作为Queue类的基础,而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(...)行,从底部开始的三行导致错误:


  队列类型中的方法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)都是通用类。

最佳答案

您试图为某个任意类型Queue<T>创建一个T-但随后您试图使Job入队。

例如,您认为将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)的“加末”行为也是...)

10-02 21:51