如何将Class <?>转换为Class <T>?

我有Class<?>字段的类。 我有一个方法,它必须在Jackson的帮助下将字符串投射到对象上。

 private Class<?> myType = ...; private String jsonRepresentationOfObject = ....; ObjectMapper mapper = new ObjectMapper(); public <T> T get() { return mapper.readValue(jsonRepresentationOfObject, myType); } 

有没有可能将myTypeT ? 或者这是不可能的,因为类型擦除?

如果你确定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()