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

标签 java generics casting jackson type-erasure

我和Class<?>一起上课 field 。我有一个方法,必须在 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 - 如何将 Class<?> 转换为 Class<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45358322/

相关文章:

java - 创建通用 HashMap 数组

java - 为什么 Java 的 +=、-=、*=、/= 复合赋值运算符不需要将 long 转换为 int?

java - ThreadLocal随机设置种子

java - 在 log4j2 中记录 PID 而不使用线程上下文

java - 为什么我的示例不抛出 ConcurrentModificationException

typescript - TypeScript 3 的通用 curry 函数

java - 如何从 Eclipse 插件中启动 "import maven project"?

generics - Dart:需要实现运算符 [] 的通用约束

c - 在链接列表中使用 "void *"时出现问题

c# - 删除 DateTime.UctNow.TimeOfDay 的毫秒部分的最简单方法是什么?