在Java中实例化泛型类

我知道Java的泛型在某种程度上逊于.Net。

我有一个泛型类Foo<T>,我确实需要使用无参数构造函数实例化T in Foo。如何解决Java的局限性?

回答:

一种选择是传递Bar.class(或你感兴趣的任何类型-以任何方式指定适当的Class<T>引用)并将该值保留为字段:

public class Test {

public static void main(String[] args) throws IllegalAccessException,

InstantiationException {

Generic<Bar> x = new Generic<>(Bar.class);

Bar y = x.buildOne();

}

}

public class Generic<T> {

private Class<T> clazz;

public Generic(Class<T> clazz) {

this.clazz = clazz;

}

public T buildOne() throws InstantiationException, IllegalAccessException {

return clazz.newInstance();

}

}

public class Bar {

public Bar() {

System.out.println("Constructing");

}

}

另一种选择是具有“工厂”接口,然后将工厂传递给泛型类的构造函数。这更加灵活,你无需担心反射异常。

以上是 在Java中实例化泛型类 的全部内容, 来源链接: utcz.com/qa/433460.html

回到顶部