android 生成泛型对象,java android解析多层含有泛型对象的json数据获取不到泛型类型解析失败解决办法...

####问题描述

* 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**

```java

public 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": "444445462@qq.com"

}

}

```

####如果直接使用传递过去的泛型类型解析,解析不出result

**解析代码**

```java

Gson gson = new Gson();

PackageModel eventBusModel2 = gson.fromJson(response.body(),PackageModel.class);

```

**解析结果,是map而不是对象**

![图片.png](https://upload-images.jianshu.io/upload_images/2704327-cd8427c43f4a40c6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

####原因:泛型擦除机制

**泛型只在编译期间起作用,运行期间是获取不到泛型信息的。即使我们在运行期间用反射去获取泛型类型,也是无效的。所以不要想着去获取泛型类型了**

####既然无法获取泛型类型,而gson解析又一定要传递具体类型,怎么办呢?

* 1.可以通过自定义转换器构造函数传递具体的类型。**比如ok-go源码里面对于json数据的转换,就是通过构造函数传递具体的数据类型的**

![图片.png](https://upload-images.jianshu.io/upload_images/2704327-1c0d4e1704a4150a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/800)

* 2.可以通过反射获取方法返回值具体类型

**首先定义请求方法的返回值为具体类型,调用的时候还是传递泛型**

![图片.png](https://upload-images.jianshu.io/upload_images/2704327-4195f9dd223ef509.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**解析的时候利用反射获取此方法的返回值类型,那么解析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**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 机器人动画,Android 5.X与Android4.X版本机器人动画的区别以及制作动画的方法...

今天翻了下墙,解决了一直以来的疑惑问题:为什么Android5.0以及6.0的recovery版本,机器人动画怎么就只有一张图片?这个问题,我百思不得其解,看了很多网文,也只是有了个概念。请参考以下文档&…

android盒子smb,普通安卓盒子smb方法 - 怀旧游戏长廊 - A9VG电玩部落论坛 - Powered by Discuz!...

本帖最后由 slime525 于 2018-10-20 21:00 编辑1安卓下安装盒子伴侣一键自动安装Optware2win下安装Putty,记下盒子ip端口,账户密码分别是:root,toor。小写!3然后直接输入:ipkg-opt install samba就会自动下…

android .9编译,在Ubuntu 9.04下编译Android源码

一直都是刷官方的版本,准备自己编译一下刷机。首先是下载,Android的源码是托管在Linux Kernel的源码站点,所以版本工具是git。关于git的使用和安装请见我的另一篇文章《在Ubuntu Server上安装Git》。创建一个存放Andorid的目录,然…

android reshare.c病毒,恶意软件分析 URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...

META-INF/MANIFEST.MFtNDfEFTy~s{Cg\V/OxIl[Mf"JC E_UcB1$^x6"i]6U#3D5Tmw>20#&hG;bVl*XK]xJU"#k})ek?w&);ViFd0iCFvye{(jB9w%^!yEj2,DGAW|^8ws%bD*eQ6n]fI_w3_nP_gxWll)zf[}l[[Rpn7x7?vbxfuVzgOj^x^lZ,b;%TK7k^mro)AYQJ2o^sL/EDh"^qND9V|Gn(…

imeoptions android,软键盘小记Android:imeOptions

1.actionUnspecified 未指定,对应常量EditorInfo.IME_ACTION_UNSPECIFIED.2.actionNone 没有动作,对应常量EditorInfo.IME_ACTION_NONE3.actionGo 去往,对应常量EditorInfo.IME_ACTION_GO4.actionSearch 搜索,对应常量EditorInfo.IME_ACTION_SEARCH5.actionSend 发送,对应常量E…

android rn框架开发的例子,RN与安卓通信架构篇

本篇文章介绍的搭建Android与Rn之间的简易通信架构,需要了解通信的基本使用的同学可以参考下面的链接开篇先上图 - “简易版的通信架构图”RN与Android之间通信的架构图本架构实现的功能有:自定义通信规则,并以Json作为数据传输格式进行传输实…

android 查询所有图片和视频,Android系统详解之获取图片和视频的缩略图

从Android 2.2开始系统新增了一个缩略图ThumbnailUtils类,位于framework的android.media.ThumbnailUtils位置,可以帮助我们从mediaprovider中获取系统中的视频或图片文件的缩略图,该类提供了三种静态方法可以直接调用获取。1.static Bitmap c…

node将图片转换成html文件,node+puppeteer将整个网页html转换为图片并保存【滚动截屏】...

Puppeteer 是 Chrome 开发团队在 2017 年发布的一个 Node.js 包,用来模拟 Chrome 浏览器的运行。demo只支持将简单不需要翻页,不需要登陆的页面转换为图片需要node环境,以及npm或cnpm包管理工具(自行百度)开始进入一个新的项目目录&#xff0…

html hover效果下拉个框,关于下拉菜单(CSS)中,“:hover”样式的设置问题?

各位大大,请帮忙解决一下这个问题,先谢谢!由于之前的代码不是全部帖出,可能造成一点信息误解。以下是针对这个问题另外写的代码:.nav {width: 50px;height: 50px;overflow:hidden;background-color: #09F;transition: …

计算机基础知识离线作业答案,浙大远程教育计算机离线作业1.计算机基础知识题...

浙大远程教育计算机离线作业1.计算机基础知识题第1章 计算机基础知识(单选题)这些题目必须做一遍,来自统考题库(期末考试题也多半出在这里),参考答案在另一个Word文档中(上传自己做的答案后才可以下载…)。据说,统考题库中大约有10,000测试题…

go 生成hash_go基础之map-写在前面(一)

为什么分析map在计算机编程语言当中,用的最多的数据结构估计就是map。map以他近乎o(1)的查找效率和修改效率让他在大多数场景下都比较受青睐。map的常规的实现方式都是hash其他数据结构,如java是hash红黑树,而我现在即将要分析的go的实现方式…

大学数学建模大赛是用计算机,北京大学第十届“江泽涵杯”数学建模与计算机应用竞赛试题...

消息来源:http://www.math.pku.edu.cn:8000/news/read.php?newsid8014A题:投篮问题投篮是篮球运动中一项关键性技术,是一项重要的得分手段。在篮球赛中有三种特殊的投篮方式,“三分球”、“两分球”和“一分球(罚篮)”。其中&…

dynamo方程怎么写_【简明自控】为什么特征方程如此重要

简明自动控制——为什么特征方程如此重要。热场视频:自平衡杆-双轴反作用轮倒立摆_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com顶个棍子!具有主动脚轮的全向移动机器人_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com我自行车怎么少…

用户计算机可以通过电话拨号,用户计算机可以通过大型局域网、小型局域网、无线连接、电话拨号和()等方式接入Internet。...

_在保险合同中,用于体现保险利益载体的保险对象条款,被称为()条款。何为C/H比?原料中的C/H比与原性能的关系是什么?选址意见书、规划条件、建设用地规划许可证、建设工程规划许可证的有效期为()福建木偶戏颇负盛名,以(…

和佳股份有没有纳米机器人_新高赛复赛入围项目(49)一种纳米硅质绝热材料及其制备方法...

点击上方“蓝字”关注我们“2020中国山东新旧动能转换高价值专利培育大赛”(简称“新高赛”)是由山东省市场监督管理局(知识产权局)主办,由山东省知识产权事业发展中心、知识产权出版社有限责任公司共同承办的以新旧动能转换高价值专利培育为主题的创新大赛。新高赛…

分数乘整数计算机在线应用,分数乘整数应用题.doc

分数乘法应用题【知识要点】求一个数的几分之几是多少和求一个数的几倍是多少的分数应用题的解题思路和解答方法。1、一本书100页,看了,看了多少页?想:看了,是看了 的,就是把 看作单位“1”,求看…

mastercam加工报表生成_2020北京加工中心编程培训工厂教学行业

2020北京加工中心编程培训工厂教学行业河北德玛数控培训自办工厂 全程四轴五轴实践 学生直接面对客户 承揽加工各种异形件复杂件 终身技术支持 可勤工俭学 解决企业各种技术问题,每个校区都有实训车间,实训图档不限、不限、时间不限、并且不另收费&#…

背景调查 跳槽_分享 | 录用背景调查,查的到底是什么?

招聘对于HR而言,是一项常规工作,同时也是一项非常重要的工作,招聘有一系列的步骤和程序,每一道步骤和程序都必不可少,显得那么的重要,这其中包括我们常说的笔试、面试、体检,还包括不常说的正式…

html链接word,word添加网址超链接方法

word添加网址超链接方法大家对于超链接都了解吗?那么在word中应该如何设置超链接呢?下面是小编分享给大家的word添加网址超链接方法,希望对大家有帮助。1、直接拖动选定文本这个方法是最简单的方法,在word文档中直接拖动鼠选定的文…

.class文件转换.java_Java中的动态链接VS操作系统动态链接

在操作系统OS中为了优化内存的使用会采用一种动态链接方式,一个文件想要在操作系统中运行必须经过编译、汇编译、链接、装载等步骤。可以参考Java程序是怎么跑起来的。本篇主要讲解Java栈帧中动态链接部分与操作系统的的动态链接的区别与联系操纵系统为什么需要动态…