你提出的语法无效。下列
new TypeToken<ArrayList<Class.forName(MyClass)>>
之所以无效,是因为你试图传递期望类型名称的方法调用。
下列
new TypeToken<ArrayList<T>>()
由于泛型(类型擦除)和反射的工作方式,因此无法实现。整个TypeToken黑客工作,因为
Class#getGenericSuperclass()以下
返回表示该类表示的实体的直接超类的Type(类,接口,原始类型或void)。
如果超类是参数化类型,则返回的Type对象必须准确反映源代码中使用的实际类型参数。
换句话说,如果看到
ArrayList<T>,
ParameterizedType那么它将返回,并且你将无法提取类型变量T本应具有的编译时间值。
Type和
ParameterizedType都是接口。你可以提供自己的实现的实例。



