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

lsmepo6l  于 10个月前  发布在  其他
关注(0)|答案(3)|浏览(87)
  1. public abstract class VfNetCallback<T> extends AbsCallback<VfNetResponse<T>> {
  2. @Override
  3. public VfNetResponse<T> parseNetworkResponse(Response response, int id) throws Exception {
  4. VfNetResponse<T> netResponse = JSON.parseObject(response.body().toString(), VfNetResponse<T>.class);
  5. return netResponse;
  6. }
  7. }

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

anhgbhbe

anhgbhbe1#

找到办法了。

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

f1tvaqid2#

https://github.com/alibaba/fastjson/wiki/TypeReference
这里的单参数和双参数是不是你想要的?

xpcnnkqh

xpcnnkqh3#

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

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

相关问题