实例化其构造函数采用类对象参数的java泛型类

实例化其构造函数采用类对象参数的java泛型类,java,generics,Java,Generics,我有超级队列课程 public class SuperQueue<E> implements Queue<E>{ SuperQueue(Class<? extends Queue<E>> subqClass) {} } 公共类SuperQueue实现队列{ 代码中的超级队列(类) SuperQueue<Integer> superq = new SuperQueue<Integer>(ConcurrentLinkedQ

我有超级队列课程

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

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

}
公共类SuperQueue实现队列{
代码中的超级队列(类)

SuperQueue<Integer> superq = new SuperQueue<Integer>(ConcurrentLinkedQueue.class);
SuperQueue superq=新的超级队列(ConcurrentLinkedQueue.class);
您正在传递不兼容的类型,因为
Class
无法转换为
Class
SuperQueue superq=
新建超级队列((类)
(Class)ConcurrentLinkedQueue.Class);

您必须使用扩展队列的类,而不是类引用。像SuperQueue superq=new SuperQueue(new ConcurrentLinkedQueue())这样的东西不能
new ConcurrentLinkedQueue()
创建队列对象而不是类对象?是的,该行的意思是传递的对象应该扩展类队列。但是为什么我不能传递
ConcurrentLinkedQueue.class
ConcurrentLinkedQueue
实现
queue
,就像您的示例中的Foo一样。因为ConcurrentLinkedQueue实现了队列不Queue@Tim:因为只有一个ConcurrentLinkedQueue类对象。不同类型的参数没有不同的对象。
SuperQueue<Integer> superq = new SuperQueue<Integer> (ConcurrentLinkedQueue<Integer>.class)
SuperQueue<Integer> superq = new SuperQueue<Integer>(ConcurrentLinkedQueue.class);
class Foo implements Queue<Integer> {...}
SuperQueue<Integer> superq = new SuperQueue<Integer>(Foo.class);
SuperQueue<Integer> superq =
    new SuperQueue<Integer>((Class<ConcurrentLinkedQueue<Integer>>)
                            (Class<?>)ConcurrentLinkedQueue.class);