如何将Class <! - ? - >转换为Class <t>?

时间:2017-07-27 18:20:26

标签: java generics casting jackson type-erasure

我有Class<?>字段的课程。我有一个方法,必须在杰克逊的帮助下将字符串转换为对象。

private Class<?> myType = ...;
private String jsonRepresentationOfObject = ....;
ObjectMapper mapper = new ObjectMapper();

public <T> T get() {
   return mapper.readValue(jsonRepresentationOfObject, myType);
}

是否有可能将myType投射到T?或者因为类型擦除而不可能?

2 个答案:

答案 0 :(得分:2)

如果您完全确定readValue的结果属于T类型,则可以执行此操作:

public <T> T get() {
   return (T)mapper.readValue(jsonRepresentationOfObject, myType);
}

但是,对于未经检查的演员表,你必须@SuppressWarnings

在其他语言中(如可以与Java交互的Kotlin),您可以使用reified generics但由于类型擦除而在Java中不存在。

如果readValue 的结果不是T,那么您将获得ClassCastException,因此请明智地使用它。

答案 1 :(得分:-1)

由于类型擦除,这是不可能的。这就是为什么Java中的某些库函数可以传入一个类的实例,除了执行.getClass()之外,它不用于任何其他类。我现在实际上编写了非常相似的代码,最后我在({相当于)(T returnType)的类上签了一个签名然后在readValue调用中传入returnType.getClass()