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.pswp.cn/news/451845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451845.shtml
英文地址,請注明出處:http://en.pswp.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,…