java - 在 Java 中实例化一个泛型类

标签 java generics

我知道 Java 的泛型不如 .Net 的。

我有一个通用类 Foo<T> ,我真的需要实例化一个 TFoo使用无参数构造函数。如何解决 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");
    }
}

另一种选择是拥有一个“工厂”接口(interface),并将工厂传递给泛型类的构造函数。这样更加灵活,而且您无需担心反射异常。

关于java - 在 Java 中实例化一个泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1090458/

相关文章:

java - 公共(public)类 PriorityQueue <T extends Comparable<T>>

java - 如何在 kiosk 模式/锁定任务模式下将安装程序包列入白名单?

java - 如何使用java selenium点击jsp页面中vue js渲染的按钮

java - 使用 JSON 迭代器输入安全警告

java - 从通配符列表中删除每个第 N 个元素 - Java

Java泛型 super 用法

c# - 如何通过其属性之一对通用 List<T> (当 T 是一个类时)进行排序?

java - 如何更改数组列表中的整数而不丢失其在该列表中的顺序

java - JBOSS 中的类加载

ios - 协议(protocol)上的关联类型和泛型