如何将Class <?>转换为Class <T>?
我有Class<?>
字段的类。 我有一个方法,它必须在Jackson的帮助下将字符串投射到对象上。
private Class<?> myType = ...; private String jsonRepresentationOfObject = ....; ObjectMapper mapper = new ObjectMapper(); public <T> T get() { return mapper.readValue(jsonRepresentationOfObject, myType); }
有没有可能将myType
为T
? 或者这是不可能的,因为类型擦除?
如果你确定readValue
的结果是T
类型的,你可以这样做:
public <T> T get() { return (T)mapper.readValue(jsonRepresentationOfObject, myType); }
你将不得不@SuppressWarnings
未经检查的强制转换。
在其他语言(如可与Java互操作的Kotlin)中,您可以使用reified generics
但由于类型擦除,它不在Java中。
如果readValue
的结果不是T
那么你将得到一个ClassCastException
所以明智地使用它。
这是不可能的,感谢类型擦除。 这就是为什么Java中的某些库函数要传递一个除了执行.getClass()
之外不用于其他任何类的实例。 我现在实际上正在编写非常相似的代码,而且我最终在类的(等价) (T returnType)
上签名,然后在readValue
调用中,我传入了returnType.getClass()
。