0

PrintQueueクラスのベースとして機能するQueueクラスのベースとして機能するLinkedListクラスがあります。

これが私の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));
    }
}

下から3行目のqueue.enqueue(...)行は、エラーになります。

タイプQueueのメソッドenqueue(T)は、引数(ジョブ)には適用できません。

PrintQueueは、ジョブオブジェクトのキューです。

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++;

}

なぜこれが機能しないのですか?3つのクラス(PrintQueue、Queue、LinkedList)はすべてジェネリッククラスです。

4

3 に答える 3

2

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)の「追加」動作がないキューもあります。 ..)

于 2012-10-15T18:41:54.593 に答える
0

あなたが言ったように、あなたの方法は次のとおりです:

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

パラメータタイプであるを見てくださいTJobパラメータクラスもジェネリックであることを確認してください。完了したら、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 に答える