new TypeToken<List>>(){}.getType() 是什么意思

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

1.  项目中代码:

List<AppVersion> redisList = new Gson().fromJson(json, new TypeToken<List<AppVersion>>(){}.getType());

2.   fromJson方法就是下面这个方法,将一个Json数据转换为对象。

提供两个参数,分别是json字符串以及需要转换成对象的类型。

在我们项目中是把Json格式的数据转换成List<AppVersion> 类型。

@SuppressWarnings("unchecked")public <T> T fromJson(String json, Type typeOfT) throws JsonSyntaxException {if (json == null) {return null;}StringReader reader = new StringReader(json);T target = (T) fromJson(reader, typeOfT);return target;}

3.  new TypeToken<List<AppVersion>>(){}.getType()  ,这个位置要的参数是一个Type,表示是xxx类型,但是Type是个接口,如下:

 

public interface Type {/*** Returns a string describing this type, including information* about any type parameters.** @implSpec The default implementation calls {@code toString}.** @return a string describing this type* @since 1.8*/default String getTypeName() {return toString();}
}

new XXX();  这样是一个构造函数,但是接口是不能直接new的,所以这时用到了匿名内部类,实现接口成为一种具体的类型。

TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。

先调用TypeToken<T>的构造器得到匿名内部类,再由该匿名内部类对象调用getType()方法得到要转换成的type,

在此就是得到的type就是列表类型:List<AppVersion>类型。

  new TypeToken<List<AppVersion>>(){}.getType()  就是说要把Json数据转换成List<AppVersion>类型的结果。

4. 匿名内部类使用还有如:

<span style="color:#333333">new TypeToken<LinkedList<User>>(){}匿名内部类常用在监听里面,比如我们给一个按钮加监听:JButton btn = new JButton("test");
btn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {}
});</span>

btn.addActionListener() 方法接受的是一个 ActionListener 类型的对象,而 ActionListener 是一个接口,不能直接 new。

所以本来这里该写一个类实现ActionListener接口,然后给他传参为实现类对象,

但是太麻烦了,我们直接在这里创建了那个实现类,之所以叫匿名,就是因为new的时候实现为一个类就直接调方法了,根本没有给这个类取名。

5. Gson提供的fromJson()方法是实现从Json数据到Java实体的方法,可以把Json数据转成单一实体对象类型、对象列表类型、其他结构类型。

比如:

 第一种   json字符串为:[{“name”:”name0”,”age”:0}]  转成 Person 类型:

Person person = gson.fromJson(str, Person.class);

第二种,转换成列表类型:

List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());

6. 可能出现问题:

将整形数字1存入json串,经gson解析后,可能会变成1.0,这时要用第二种转换方式。才会得到我们想要的整形1。

 

参考:http://blog.csdn.net/alexxu1988/article/details/46685433

           http://blog.csdn.net/jonemill/article/details/39084809

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

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

相关文章

11--移除重复节点

编写代码&#xff0c;移除未排序链表中的重复节点。保留最开始出现的节点。 示例1: 输入&#xff1a;[1, 2, 3, 3, 2, 1] 输出&#xff1a;[1, 2, 3] 示例2: 输入&#xff1a;[1, 1, 1, 1, 2] 输出&#xff1a;[1, 2]

信息图:程序员/开发人员实际在用哪些工具

BestVendor.com的工作人员在全球范围内采访了500名重要开发人员&#xff0c;在调查询问他们实际使用的工具后&#xff0c;制作了一张信息图&#xff0c;如下。 这张信息图覆盖10个方面的工具&#xff1a;Bug 追踪、数据库、开发框架、集成开发环境&#xff08;IDE&#xff09;、…

class特性

每个HTML元素都可以附带一个class特性。有时候&#xff0c;你希望有一种方法可以指定多个元素并将这些元素和页面上的其他元素区分出来&#xff0c;而不是单独指定文档中的某个元素。 <!DOCTYPE html> <!-- To change this license header, choose License Headers in…

Xcode代码提示联想功能失效,按command键点不进去类库,提示“?”

一大早电脑重启了下&#xff0c;打开项目之后出现了一堆问号&#xff0c;怀疑是Xcode 抽风了&#xff0c;本着怀疑的态度&#xff0c;新建了项目&#xff0c;一波操作下来是正常的&#xff0c;代码能联想&#xff0c;command也好使。于是在网上找答案&#xff0c;终于在这里找到…

12-- 缺失的第一个正数

文章目录1.问题描述2.解题代码1.问题描述 给你一个未排序的整数数组&#xff0c;请你找出其中没有出现的最小的正整数。 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11,12] 输出: 1 提示&#xff1a; 你的算法的时间复杂度应…

java中的private public protected

1、public&#xff1a;public表明该数据成员、成员函数是对所有用户开放的&#xff0c;所有用户都可以直接进行调用 2、private&#xff1a;private表示私有&#xff0c;私有的意思就是除了class自己之外&#xff0c;任何人都不可以直接使用&#xff0c;私有财产神圣不可侵…

7款最流行的在线项目管理工具推荐

本文介绍一些非常流行的在线项目管理工具&#xff0c;希望你喜欢。 1. Apptivo 如果你是一个创业的或自由开发人员&#xff0c;或者属于一个小型专业团队&#xff0c;Apptivo这个项目管理软件很值得你你研究。实质上&#xff0c;它是一个基于Web的项目管理应用&#xff0c;让你…

VR全景看年评!PConline年度评测盛典等你来体验

【PConline 2016年度评测】又是一年春草绿&#xff0c;马上还有十天扒拉月2016年就快过完了。每年到这个时候&#xff0c;我们不禁都会拷问自己&#xff1a;你存到钱了么&#xff1f;娶到媳妇了么&#xff1f;买到房了么&#xff1f;答案是都没有&#xff01;哈哈&#xff0c;这…

swagger详解

1快速环境搭建 pom.xml文件中添加如下内容(看清楚再复制&#xff0c;此处不是全部内容) 1 <properties>2 ...3 <swagger.version>2.2.2</swagger.version>4 ...5 </properties>6 7 <dependency>8 …

13--长度最小的子数组

文章目录1.题目要求2.解题代码1.题目要求 给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的连续子数组&#xff0c;并返回其长度。如果不存在符合条件的连续子数组&#xff0c;返回 0。 示例&#xff1a; 输入&#xff1a;…

HttpServletRequest 常用方法讲解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Web服务器收到一个http请求&#xff0c;会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象&#xff0c; 从客户端取…

object中的toString方法

任何一个类都是从Object类继承下来的&#xff0c;因此在任何一个类里面都可以重写这个toString()方法。toString()方法的作用是当一个引用对象和字符串作连接的时候&#xff0c;或者是直接打印这个引用对象的时侯&#xff0c;这个引用对象都会自动调用toString()方法&#xff0…

东网科技荣膺2016中国大数据最佳实践奖

11月24日&#xff0c;由中国软件网主办的数据趴活动圆满落幕&#xff0c;活动现场隆重揭晓了大数据领域的重磅榜单&#xff0c;旨在对大数据领域中表现突出的企业、人物进行表彰。东网科技有限公司(以下简称“东网科技”)凭借大数据运营支撑平台及在环保、烟草、教育、政府等行…

Apache Subversion 1.7.2发布,开源版本控制工具

SVN&#xff08;Subversion&#xff09;已经发布了1.7的第二个维护版本。 Apache Subversion是一个开放源码、多用户的版本控制系统&#xff0c;支持非 ASCII 文本和二进制数据&#xff0c;支持可在本地访问或通过网络访问的数据库和文件系统存储库。相对于传统的RCS、CVS&…

react生命周期

1、初始化getDefaultProps()设置默认的props&#xff0c;也可以用dufaultProps设置组件的默认属性。 getInitialState()在使用es6的class语法时是没有这个钩子函数的&#xff0c;可以直接在constructor中定义this.state。此时可以访问this.propscomponentWillMount()在组件初始…

14--用两个栈实现队列

文章目录1.题目详情2.解题代码1.题目详情 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回 -1 ) 示例…

浅谈爬虫 《一》 ===python

浅谈爬虫 《一》 python ‘’正文之前先啰嗦一下&#xff0c;准确来说&#xff0c;在下还只是一个刚入门IT世界的菜鸟&#xff0c;工作近两年了&#xff0c;之前做前端的时候就想写博客来着&#xff0c;现在都转做python了&#xff0c;如果还不开始写点什么&#xff0c;估计时间…

Servlet全面讲解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。Servlet&#xff08;Server Applet&#xff09;&#xff0c;全称Java Servlet。是用Java编写的服务器端程序。Servlet 是在服务器上运行的…

你的代码可以是优雅的,但是还有更重要的

引用软件设计有两种方法&#xff1a;一种是尽可能地简单&#xff0c;这种设计明显没有什么缺陷&#xff1b;另一种是尽可能地复杂&#xff0c;这种设计没有明显的缺陷。 ——C.A.R. Hoare&#xff0c;1980年图灵奖讲座在开发过程中&#xff0c;我的口头禅是&#xff1a; Your c…

15--0~n-1中缺失的数字

文章目录1. 问题描述2. 解题代码1. 问题描述 一个长度为n-1的递增排序数组中的所有数字都是唯一的&#xff0c;并且每个数字都在范围0&#xff5e;n-1之内。在范围0&#xff5e;n-1内的n个数字中有且只有一个数字不在该数组中&#xff0c;请找出这个数字。 示例 1: 输入: [0,…