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

Pau*_*Pau 17 java generics

我怎样才能转换java.lang.reflect.TypeClass<T> clazz

如果我有一个方法接下来有一个参数Class<T>:

public void oneMethod(Class<T> clazz) {     
    //Impl
}
Run Code Online (Sandbox Code Playgroud)

然后另一个方法有一个参数java.lang.reflect.Type和它调用oneMethod(Class<T> clazz),我需要转换java.lang.reflect.Type typeClass<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>?);
}
Run Code Online (Sandbox Code Playgroud)

可能吗?

Dan*_*eer 16

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

Class<?> clazz = com.google.common.reflect.TypeToken.of(type).getRawType();
Run Code Online (Sandbox Code Playgroud)

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

Class<?> clazz = com.fasterxml.jackson.databind.type.TypeFactory.rawClass(type);
Run Code Online (Sandbox Code Playgroud)

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


And*_*ner 14

您必须确保它type是一个实例Class,然后将其强制转换.

if (type instanceof Class) {
  @SuppressWarnings("unchecked")
  Class<?> clazz = (Class<?>) type;
  otherMethod(clazz);
}
Run Code Online (Sandbox Code Playgroud)

当然,你还必须处理它不是的情况Class.