郴州网站建设网站,wordpress中visitor,没有icp备案的ip地址访问的网站会被各搜索引擎收录吗,宝安沙井网站建设####问题描述* java 解析多层含有泛型对象的json数据获取不到泛型类型* 如果将泛型改成实际的类型就能正常解析* 如果不改成实际的类型泛型数据被解析成com.google.gson.internal.LinkedTreeMap* 如果强制转换报错:java.lang.ClassCastException: com.google.gson.internal.Lin…####问题描述* java 解析多层含有泛型对象的json数据获取不到泛型类型* 如果将泛型改成实际的类型就能正常解析* 如果不改成实际的类型泛型数据被解析成com.google.gson.internal.LinkedTreeMap* 如果强制转换报错:java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.example.vizax.with.bean.BaseBean####下面是具体的实体类和json数据**java通用数据模型,含有泛型T**javapublic class PackageModel {public T result;public String message;public int code;}**json数据**json{code: 0,message: 操作成功,result: {accessToken: 17049387C5E8D331CF8B5B2A9805880E,userId: 241520,account: 18688888888,sex: 1,userName: 号有,nickName: 测试,cityName: 天津 河北区,iconUrl: https://www.it399.com,hasDevice: 1,email: 444445462qq.com}}####如果直接使用传递过去的泛型类型解析解析不出result**解析代码**javaGson gson new Gson();PackageModel eventBusModel2 gson.fromJson(response.body(),PackageModel.class);**解析结果,是map而不是对象**####原因:泛型擦除机制**泛型只在编译期间起作用运行期间是获取不到泛型信息的。即使我们在运行期间用反射去获取泛型类型也是无效的。所以不要想着去获取泛型类型了**####既然无法获取泛型类型而gson解析又一定要传递具体类型怎么办呢* 1.可以通过自定义转换器构造函数传递具体的类型。**比如ok-go源码里面对于json数据的转换就是通过构造函数传递具体的数据类型的*** 2.可以通过反射获取方法返回值具体类型**首先定义请求方法的返回值为具体类型,调用的时候还是传递泛型****解析的时候利用反射获取此方法的返回值类型那么解析json数据的时候就知道具体的类型了**java/*** 得到返回实体类型* return*/public Type getType() {//获取线程运行栈信息StackTraceElement stack[] (new Throwable()).getStackTrace();//获取请求被发起的地方的方法返回值StackTraceElement s stack[3];String key s.getMethodName();final Type type requestMethods.get(key);return type;}**注意getType的调用地方不同stack[3]的值也不同根据实际情况修改下标值*** 3.其它黑科技####总结gson解析一定要传具体的type传递泛型T是获取不到具体类型的-------------[个人网站](https://www.it399.com)[个人博客](https://www.it399.com/blog/index)------------- 本文同步发布在 [在线助手](https://www.it399.com) **转载请注明来自 [在线助手博客](https://www.it399.com/blog/index) 频道【[java android解析多层含有泛型对象的json数据获取不到泛型类型解析失败解决办法](https://www.it399.com/blog/web/201806141400)]】,原文链接**:**https://www.it399.com/blog/web/201806141400**