我有Class<?>
字段的课程。我有一个方法,必须在杰克逊的帮助下将字符串转换为对象。
private Class<?> myType = ...;
private String jsonRepresentationOfObject = ....;
ObjectMapper mapper = new ObjectMapper();
public <T> T get() {
return mapper.readValue(jsonRepresentationOfObject, myType);
}
是否有可能将myType
投射到T
?或者因为类型擦除而不可能?
答案 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()