2014-10-06 99 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); 
相关问题