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

luv*_*ere 8 java generics reflection parameterized

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

我有

public class SomeClass<T> {
   public SomeClass<T>() {
   }
}
Run Code Online (Sandbox Code Playgroud)

我需要一个它的实例.

我尝试过变种

Class c = Class.forName("SomeClass");
Run Code Online (Sandbox Code Playgroud)

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

SomeType instance = (SomeType)Class.forName("SomeClass<SomeType>").createInstance();
Run Code Online (Sandbox Code Playgroud)

那么,我该怎么做呢?

Chr*_*ung 7

Java使用基于擦除的仿制药(即,类型参数是在运行时,例如擦除,List<Integer>并且List<String>被视为在运行时是同一类型).由于反射本质上是运行时特征,因此根本不使用或不涉及类型参数.

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