我希望从TypeReference<E>
对象转到Java中的Class<E>
对象,不使用使用转换。我需要TypeReference
的使用,因为我的代码使用杰克逊的方式,我需要Class
对象,因为我想用它来推断我的其他Generic中的一个类型我的应用中的课程。
我知道TypeReference.getType()
将返回java.lang.reflect.Type个对象。基本上,如果我能找到一种方法来使用代码而无需强制转换从Type
到Class
,那么我就已经找到了问题。
Javadoc参考:
答案 0 :(得分:7)
你不能强制转换它:这是非常基本的Java问题 - TypeReference和Class不是从相同的基类派生的,因此它违背了语言定义。
但如果我猜对了你想要实现的目标,你可以使用JavaType
来转换原始(类型擦除)类:
JavaType type = mapper.getTypeFactory().constructType(ref);
Class<?> cls = type.getRawClass();
您可以从JavaType
,TypeReference
或甚至只是基本的JDK Class
构建Type
。
答案 1 :(得分:1)
没有铸造,我没有看到任何解决方案。但是,这是一种具有通用铸造的解决方案。也许这也有帮助:
public class Converter {
public static <T> Class<T> convert(TypeReference<T> ref) {
return (Class<T>)((ParameterizedType) ref.getType()).getRawType();
}
}
然而,这是一种框架方法。签名是完全类型保存,它转换为包含所有“超类型令牌”信息的类,Neal Gafter在他的blog entry中提到了TypeReference的概念。通过它,它可以保持您的业务代码清洁并输入save。
然后使用(这里你看不到演员......; - ):
Class<List<String>> typ = Converter.convert(new TypeReference<List<String>>() {});
System.out.println(typ);
使用输出(当然,即使代码显示字符串,实例也是类型已经打开...):
interface java.util.List