2014-10-06 115 views
0

我SuperQueue類Instanize Java的泛型類其構造函數採用類對象參數

public class SuperQueue<E> implements Queue<E>{ 

SuperQueue(Class<? extends Queue<E>> subqClass) {} 

} 

如何創建一個SuperQueue對象?我曾嘗試:

SuperQueue<Integer> superq = new SuperQueue<Integer> (ConcurrentLinkedQueue.class) 

SuperQueue<Integer> superq = new SuperQueue<Integer> (ConcurrentLinkedQueue<Integer>.class) 
+0

你必須使用擴展隊列的類。而不是類參考。有些東西像SuperQueue superq = new SuperQueue (new ConcurrentLinkedQueue ()) – StackFlowed 2014-10-06 20:00:04

+0

不是'new ConcurrentLinkedQueue ()'創建隊列對象而不是類對象嗎? – Tim 2014-10-06 20:02:57

+0

是該行的含義是傳遞的對象應擴展類隊列。 – StackFlowed 2014-10-06 20:04:14

回答

1

在你的代碼

SuperQueue<Integer> superq = new SuperQueue<Integer>(ConcurrentLinkedQueue.class); 

你逝去的不兼容的類型,因爲Class<ConcurrentLinkedQueue>不能轉換到Class<? extends Queue<Integer>

爲了創建對象,你需要傳遞一個實現了的類例如

class Foo implements Queue<Integer> {...} 

,然後你可以使用它像這樣

SuperQueue<Integer> superq = new SuperQueue<Integer>(Foo.class); 
+0

但爲什麼我不能通過'ConcurrentLinkedQueue .class'? 'ConcurrentLinkedQueue '劑量器'隊列',就像你的例子中的Foo。 – Tim 2014-10-06 20:20:12

+0

因爲ConcurrentLinkedQueue 實現隊列而不是隊列 sol4me 2014-10-06 20:24:44

+0

@Tim:因爲只有一個ConcurrentLinkedQueue類對象。對於不同的類型參數沒有不同的。 – newacct 2014-10-07 19:30:14

0
SuperQueue<Integer> superq = 
    new SuperQueue<Integer>((Class<ConcurrentLinkedQueue<Integer>>) 
          (Class<?>)ConcurrentLinkedQueue.class);