2012-10-15 27 views
0

我有一個LinkedList類,它充當Queue類的基礎,它是PrintQueue類的基礎。我正在嘗試創建一個Queue類,但不斷收到一個似乎與泛型相關的錯誤。爲什麼我得到這個錯誤?

這裏是我的打印隊列類:

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(...)線,三從底部導致錯誤:

The method enqueue(T) in the type Queue is not applicable for the arguments (Job)

打印隊列爲工作對象的隊列。

在我的Queue類的排隊方法是這樣的:

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)都是泛型類。

+0

如何是你正在做的比內置的類提供鏈表和隊列更好? –

回答

2

您正試圖爲某些任意類型T創建一個Queue<T> - 但您試圖排入Job

您認爲這意味着如何排隊JobQueue<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) 「添加到結束」 的行爲,太...)

0

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

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

請看參數類型,這是T。請確保參數類Job也是通用的。一旦這樣做,請致電enqueue方法:

queue.enqueue((T)(new Job(owner, jobID))); 
0

爲了避免混淆,我看到隊列是一個自定義類,而不是java.util.Queue中的接口。

我強烈建議你實現java.util.Queue而不是重新發明輪子。它僅適用於方法:element(),peek(),poll(), offer(E) and remove()

Interface Queue

相關問題