Instanize java泛型类,其构造函数采用类对象参数

时间:2014-10-06 19:51:21

标签: java generics

我有SuperQueue类

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)

2 个答案:

答案 0 :(得分:1)

在您的代码中

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

您传递的是不兼容的类型,因为Class<ConcurrentLinkedQueue>无法转换为Class<? extends Queue<Integer>

为了创建对象,您需要传递一个实现Queue<Integer>的类,例如。

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

然后你可以像这样使用它

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

答案 1 :(得分:0)

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