基本上恰恰相反of this question。我想转换一个Class< T>对象为TypeReference< T>对象
我试过了:
foo(Class<T> valueType)
{
TypeReference ref = new TypeReference<T>(){};
}
但是它只返回类的超类的类型引用。我也尝试过:
foo(Class<T> valueType)
{
TypeReference ref = new TypeReference<valueType>(){};
}
和
foo(Class<T> valueType)
{
TypeReference ref = new TypeReference<valueType.getRawClass()>(){};
}
但是后两个不编译。我该怎么做?
答案 0 :(得分:15)
您可以覆盖getType()
以返回您的类型:
new TypeReference<T>(){
@Override
public Type getType() {
return valueType;
}
};
答案 1 :(得分:5)
正如其他人所指出的,你可能正在解决错误的问题。
您可能希望统一的内容实际上是JavaType
,因为这是您的两个输入转换为的内容,这就是杰克逊内部用于所有内容的内容。
然后,您可以使用便捷方法前往JavaType
。
答案 2 :(得分:1)
我想将Class对象转换为TypeReference对象。
有可能这样做,但我想不出它解决的任何现实问题。请考虑TypeReference javadoc
中的此信息此类用于传递完整的泛型类型信息,并避免类型擦除问题(基本上从运行时类对象中删除大多数可用的类型引用)。
我对此的解释是当您需要Class对象可以提供的更多类型信息时,唯一一次使用TypeReference而不是Class。所以即使你能弄清楚如何进行这种转换 - 你获得了什么?无法将类中已删除的类型信息放回TypeReference中。
每当我遇到需要TypeReference而不是Class的情况时,我会创建一个具体的类型引用实例并在运行时传递该对象。这样的事情(可能无法编译,但你明白了)
foo(TypeReference<T> refArg)
{
TypeReference<T> ref = refArg;
}
// later on
object.foo(new TypeReference<List<Set<MyObject>>(){});