fastjson 泛型传参数,如何获取包装泛型的整个class

lsmepo6l  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(58)
public abstract class VfNetCallback<T> extends AbsCallback<VfNetResponse<T>> {

    @Override
    public VfNetResponse<T> parseNetworkResponse(Response response, int id) throws Exception {
        VfNetResponse<T> netResponse = JSON.parseObject(response.body().toString(), VfNetResponse<T>.class);
        return netResponse;
    }

}

如上,想在parseNetworkResponse中针对VfNetResponse < T >.class进行解析,求问应该如何处理?
已知通过 Class< T > dataClass = (Class < T >) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 可以获取T对应的class。但现在想获取VfNetResponse< T >.class传入fastjson进行直接解析。

anhgbhbe

anhgbhbe1#

找到办法了。

@Override
    public VfNetResponse<T> parseNetworkResponse(Response response, int id) throws Exception {
        Type dataType =  ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        Type type = new ParameterizedTypeImpl(new Type[]{dataType}, null, VfNetResponse.class);
        VfNetResponse<T> netResponse = JSON.parseObject(response.body().string(), type);
        return netResponse;
    }
xpcnnkqh

xpcnnkqh3#

@wenshao wen 单参数 双参数需要传递Class,不是很方便。现在我是使用反射获取。如下:

@Override
    public VfNetResponse<T> parseNetworkResponse(Response response, int id) throws Exception {
        Type dataType =  ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        Type type = new ParameterizedTypeImpl(new Type[]{dataType}, null, VfNetResponse.class);
        VfNetResponse<T> netResponse = JSON.parseObject(response.body().string(), type);
        return netResponse;
    }

相关问题