Java从类构造泛型实例

Java从类构造泛型实例,java,generics,reflection,Java,Generics,Reflection,我试图构造一个泛型类的实例,带有一个类型参数。例如,如果有ArrayList.class,我想用classString.class初始化它,我该怎么做?我知道我可以使用ArrayList.class.newInstance()创建新实例,但我不能传递类型参数。我想创建新的ArrayList,但是对于那个特定的示例,不需要任何具有类型参数的类 具体地说,我正试图通过JUnit测试的子类化来实现这一点。我意识到,可以只返回泛型类的初始化,而不使用类型paremeter,并将其强制转换为该pareme

我试图构造一个泛型类的实例,带有一个类型参数。例如,如果有
ArrayList.class
,我想用class
String.class
初始化它,我该怎么做?我知道我可以使用
ArrayList.class.newInstance()
创建新实例,但我不能传递类型参数。我想创建
新的ArrayList
,但是对于那个特定的示例,不需要任何具有类型参数的类


具体地说,我正试图通过JUnit测试的子类化来实现这一点。

我意识到,可以只返回泛型类的初始化,而不使用类型paremeter,并将其强制转换为该paremeter

例如:

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());
}

private类基本上可能是重复的,您不能,因为。@RobbyCornelissen我认为不是。这是询问如何在泛型类中初始化类型。我想问的是如何用类型初始化泛型类。由于类型信息在运行时被删除,并且只对编译期间的静态类型检查有用,为什么要这样做?特别是,在运行时,
ArrayList
的实例和
ArrayList
的实例之间没有区别。基本上是这样做的:我会更新以显示我的示例您不应该捕获可丢弃的。否则,你可以这样做。我个人会强制转换到
(列表)
,并使用一个临时变量用
@SuppressWarnings(“unchecked”)
对赋值进行注释。不过,关于未经检查的转换,您会得到一个警告。@Thilo只要您在列表中没有放置未经处理的内容,它是安全的。没错。但我假设这个列表只是一个例子。对于正在测试的真实接口(和实现),这可能安全,也可能不安全。当然,触发运行时错误(如ClassCastException)正是JUnit的用途。所以这应该不是问题。