Java 从类构造通用实例

标签 java generics reflection

我正在尝试使用类型参数构造泛型类的实例。例如,如果有 ArrayList.class我想用类 String.class 初始化它, 我怎么做?我知道我可以使用 ArrayList.class.newInstance()创建一个新实例,但我无法传入类型参数。我想做new ArrayList<String> ,但不是针对该特定示例,而是具有类型参数的任何类。

具体来说,我正在尝试 implement testing of different implementations of an interface ,通过 JUnit 测试的子类化。

最佳答案

我意识到可以只返回泛型类的初始化,而不需要类型参数,然后将其强制转换为该参数。

例如:

private Class<? extends List> implementation = ArrayList.class;

private <E> List<E> newList(Class<E> itemClass) {
    try {
        return (List)implementation.newInstance();
    } catch (Throwable x) {
       return null;
    }
}

@Test
public void test1() {
    List<String> testInstance = newList(String.class);
    testInstance.add('hey');
    assertEquals(3, testInstance.get(0).lenght());
}

关于Java 从类构造通用实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26622232/

相关文章:

class - 在Scala中,如何获取 `object`(不是类的实例)的名称?

java - EasyMock:我应该关闭捕获的InputStream吗?

java - AEM Maven 无法执行安装 com.day.jcr.vault :content-package-maven-plugin

java - 打印多行字符串

c# - Dart,对泛型的限制?

Java 通用类型不匹配错误

Swift:参数化类中的方法重写

Java - 何时使用固定大小线程池和可变大小线程池?

java - 使用自定义数据类型的方法的 NoSuchMethodException

javascript - 反射 Web 应用程序 (WebIDE)