有什么方法可以将Class<MyGenericClass<MyGenericType>>
存储到Java中的变量中?我不需要在运行时解决它,只需要使用我已经知道的MyGenericType
在编译时获取该类。我曾尝试搜索此内容,但在运行时使用类型解析的结果却泛滥成灾。
例如,要获得Class,我就要做
Class<SomeClass> myClass = SomeClass.class
我想要类似
Class<MyGenericClass<MyGenericType>> myGenericClass = MyGenericClass<MyGenericType>.class
但是不能编译。
我需要Class的实例,因为我正在使用需要Class作为参数的第三方库的方法,例如:
public static <T> void doThingWithClassType(Class<T> clazz) {
...
}
答案 0 :(得分:1)
这当然是黑客,但是如果您确实需要此,则可以执行以下操作:
@SuppressWarnings("unchecked")
Class<MyGenericClass<MyGenericType>> myClass = (Class<MyGenericClass<MyGenericType>>)(Class<?>)MyGenericClass.class;
这有效,因为实际上没有MyGenericClass<MyGenericType>
类。由于泛型擦除,只剩下MyGenericClass
,因此将其强制转换为所需的实际类应该是安全的。
答案 1 :(得分:0)
在编译时如何将其存储到变量中?您只能在运行时存储它。
泛型在运行时不存在。
答案 2 :(得分:0)
Spring用TypeReference解决了这个问题,Jackson也有自己的实现TypeReference