将 java.lang.reflect.Type 转换为 Class<T>

新手上路,请多包涵

如何将 java.lang.reflect.Type 转换为 Class<T> clazz

如果我有下一个方法,它的参数为 Class<T>

 public void oneMethod(Class<T> clazz) {
    //Impl
}

Then another method which has an argument of java.lang.reflect.Type and it calls oneMethod(Class<T> clazz) and for it I need to convert java.lang.reflect.Type type to Class<T> :

 public void someMehtod(java.lang.reflect.Type type) {
   // I want to pass type arg to other method converted in Class<T>
   otherMethod(¿How to convert java.lang.reflect.Type to Class<T>?);
}

可能吗?

原文由 Pau 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.8k
2 个回答

您必须确保 typeClass 的实例,然后对其进行转换。

 if (type instanceof Class) {
  Class<?> clazz = (Class<?>) type;
  otherMethod(clazz);
}

当然,您还必须处理它不是 Class 的情况。

原文由 Andy Turner 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果你愿意使用图书馆,你可以使用 com.google.guava:guava:12+

 Class<?> clazz = com.google.common.reflect.TypeToken.of(type).getRawType();

或者,您也可以使用 com.fasterxml.jackson.core:jackson-databind:2.8.x

 Class<?> clazz = com.fasterxml.jackson.databind.type.TypeFactory.rawClass(type);

这会正确处理所有情况,您将获得您的类型的类型擦除类。

原文由 Daniel Beer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题