使用reflection在Java中创建通用参数化类
如何使用reflection在Java中创建通用参数化类?
我有
public class SomeClass { public SomeClass() { } }
我需要一个它的实例。
我尝试过变种
Class c = Class.forName("SomeClass");
但是找不到允许我获得适当类型实例的语法,比如说
SomeType instance = (SomeType)Class.forName("SomeClass").createInstance();
那么,我怎么能这样做呢?
Java使用基于擦除的generics(即,类型参数在运行时被擦除 – 例如, List
和List
在运行时被视为相同的类型)。 由于reflection本质上是运行时特征,因此根本不使用或不涉及类型参数。
换句话说,当您使用reflection时,您只能实例化原始类型( SomeClass
,而不是SomeClass
)。 然后,您必须手动将类型转换为通用版本(并生成unchecked
警告)。
查看/搜索"Type erasure"
。 generics用于编译时,它们在运行时无法使用,因此您尝试的是不可能的。 您需要使用原始类型进行reflection
由于类型擦除 ,在运行时SomeClass
是SomeClass
剩余部分。