使用reflection在Java中创建通用参数化类

如何使用reflection在Java中创建通用参数化类?

我有

public class SomeClass { public SomeClass() { } } 

我需要一个它的实例。

我尝试过变种

 Class c = Class.forName("SomeClass"); 

但是找不到允许我获得适当类型实例的语法,比如说

 SomeType instance = (SomeType)Class.forName("SomeClass").createInstance(); 

那么,我怎么能这样做呢?

Java使用基于擦除的generics(即,类型参数在运行时被擦除 – 例如, ListList在运行时被视为相同的类型)。 由于reflection本质上是运行时特征,因此根本不使用或不涉及类型参数。

换句话说,当您使用reflection时,您只能实例化原始类型( SomeClass ,而不是SomeClass )。 然后,您必须手动将类型转换为通用版本(并生成unchecked警告)。

查看/搜索"Type erasure" 。 generics用于编译时,它们在运行时无法使用,因此您尝试的是不可能的。 您需要使用原始类型进行reflection

由于类型擦除 ,在运行时SomeClassSomeClass剩余部分。