我正在尝试使用类型参数构造泛型类的实例。例如,如果有 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/