从Class <T>转换为TypeReference <T>

Jas*_*son 15 java generics class jackson

基本上恰恰与这个问题相反.我想将Class <T>对象转换为TypeReference <T>对象.

我试过了:

foo(Class<T> valueType)
{
   TypeReference ref = new TypeReference<T>(){}; 
}
Run Code Online (Sandbox Code Playgroud)

但这只是返回类的超类的类型引用.我也尝试过:

foo(Class<T> valueType)
{
   TypeReference ref = new TypeReference<valueType>(){}; 
}
Run Code Online (Sandbox Code Playgroud)

foo(Class<T> valueType)
{
   TypeReference ref = new TypeReference<valueType.getRawClass()>(){}; 
}
Run Code Online (Sandbox Code Playgroud)

但是第二个不编译.我该怎么做呢?

SLa*_*aks 17

您可以覆盖getType()以返回您的类型:

new TypeReference<T>(){
    @Override
    public Type getType() {
        return valueType;
    }
}; 
Run Code Online (Sandbox Code Playgroud)

  • 我希望我能投票一百次。我找这个花了 30 分钟。 (2认同)

Sta*_*Man 6

正如其他人所指出的,你很可能正在解决错误的问题.你可能想要统一的是JavaType,因为这就是你的两个输入被转换成的东西,这就是杰克逊内部用于一切的东西.然后你可以有方便的方法去JavaType.