从TypeReference <E>转换为Class <E>而不进行强制转换(Java)

ecb*_*die 4 java generics casting jackson

我希望在使用强制转换的情况下从Java中的TypeReference<E>对象转换为Class<E>对象.我需要使用,因为我的代码使用Jackson的方式,我需要对象,因为我想用它来推断我的应用程序中的其他通用类之一的类型.TypeReferenceClass

我知道这TypeReference.getType()会返回一个java.lang.reflect.Type对象.基本上,如果我能找到一个办法用代码,而不从铸造获得TypeClass,后来我想通了我的问题.

Javadoc参考文献:

Sta*_*Man 9

你不能强制转换它:这是非常基本的Java问题 - TypeReference和Class不是从相同的基类派生的,因此它违背了语言定义.

但如果我猜对了你想要实现的目标,你可以使用以下方法转换原始(类型擦除)类JavaType:

JavaType type = mapper.getTypeFactory().constructType(ref);
Class<?> cls = type.getRawClass();
Run Code Online (Sandbox Code Playgroud)

你可以构造JavaType出的TypeReference,Class或者甚至只是基本的JDK Type.