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

2022-09-01 11:51:12

如何转换为 ?java.lang.reflect.TypeClass<T> clazz

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

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

然后另一个方法,它有一个参数,它调用,为此我需要转换为:java.lang.reflect.TypeoneMethod(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>?);
}

可能吗?


答案 1

您必须确保 它是 的实例,然后将其强制转换。typeClass

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

当然,您还必须处理它不是.Class


答案 2

如果您愿意使用库,则可以使用: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);

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


推荐