一种选择是传递
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"); }}另一种选择是具有“工厂”接口,然后将工厂传递给泛型类的构造函数。这更加灵活,你无需担心反射异常。



