国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

當JSON解析遇上了泛型,該如何處理泛型擦除問題

開發 前端
JSON是一種輕量級的數據交換格式,簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言,常被用于實際項目中。下面本文主要通過一個實際案例討論分析在解析JSON字符串的過程中遇到泛型該如何處理。

JSON是一種輕量級的數據交換格式,簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言,常被用于實際項目中。Java生態圈中有很多處理JSON格式化的類庫,如json-lib框架、Jackson、Google的Gson、阿里的FastJson等,通過這些類庫可以使我們更加簡便地處理JSON。下面本文主要通過一個實際案例討論分析在解析JSON字符串的過程中遇到泛型該如何處理。

  • 案例描述
  • 問題引出
  • 處理方案
  • 原理分析

一、案例描述

首先介紹三個類,為了便于理解將代碼省去非關鍵部分。

  • PrepCommonResp 是一個通用響應類,為了支持多種返回類型,設置了其中一個屬性result為泛型。
    1. public class PrepCommonResp<T> { 
    2.  private T result; //獲取調用返回值 
    3.  private String code = "000000"; //獲取錯誤碼 
    4.  private String msg = "Success"
    5. //這里省略getter setter等 
  • LeaderboardResp 是一個Leaderboard接口響應類,其中有一個屬性是一個List集合集合中的對象為LeaderboardPojo
    1. public class LeaderboardResp implements Serializable { 
    2.  List<LeaderboardPojo> leaderboardList; 
    3.  //這里省略getter setter等 
  • LeaderboardPojo 是一個實體類
    1. public class LeaderboardPojo { 
    2. //基本屬性 

需求:將一個JSON字符串的String類型數據解析到指定了泛型的通用響應類實例PrepCommonResp對象中。

[[275804]]

二、問題引出

一開始編寫時,采用了Jackson的ObjectMapper類readValue方法來進行解析,具體代碼如下。

  1. ObjectMapper mapper = new ObjectMapper(); 
  2. PrepCommonResp<LeaderboardResp> resp = mapper.readValue(result,PrepCommonResp.class); 

我們期待的結果是JSON字符串被正確解析,并且result屬性的值是以指定泛型LeaderboardResp的格式存儲。但是通過斷點之后我們發現result屬性的值是以LinkedHashMap的形式存儲,與期望結果不符。

當JSON解析遇上了泛型該如何處理泛型擦除問題

三、解決方案

在分析原因之前,先來說說解決方式。解決方式有多種,我們通過了嘗試對比了各種方案之后選擇了其中一種較為簡便的就是采用Gson的fromJson方法來解決,具體代碼如下:

  1. //嘗試使用Gson 
  2. Gson gson = new Gson(); 
  3. PrepCommonResp<LeaderboardResp> resp = gson.fromJson(result, new TypeToken<PrepCommonResp<LeaderboardResp>>(){}.getType()); 
  4. List<LeaderboardPojo> list = resp.getResult().getLeaderboardList(); 

運行結果如下,result的值以我們期望的LeaderboardResp形式存儲

當JSON解析遇上了泛型該如何處理泛型擦除問題

四、原理分析

1. 先理解泛型與編譯器虛擬機的關系以及什么是擦除?

解析: Java語言的泛型基本上是在編譯器中實現的。由編譯器執行類型檢測和推斷后生成普通的非泛型的字節,虛擬機是完全無感知泛型存在的,這種實現技術稱為擦除。編譯器使用泛型類型信息保證類型安全,然后在生成字節碼之前將其清除。

[[275805]]

2. 為什么使用Jackson的readValue方法解析JSON字符串后result的屬性值會是LinkedHashMap而不是我們指定的LeaderboardResp呢?

解析:泛型只在編譯期間起到檢測作用,當編譯器將泛型類編譯完成之后,泛型類的類型參數都被全部擦除。接下來在運行期間虛擬機并不知道泛型的存在,當對JSON字符串進行解析時由于泛型被擦除了導致虛擬機并不知道要將其解析成哪種類型,所以就解析為了默認的LinkedHashMap類型,導致出現了上面的場景。

3. 那Gson是如何解決泛型擦除這種情況呢?

我們來看看這一句核心代碼

  1. PrepCommonResp<LeaderboardResp> resp = gson.fromJson(result, new TypeToken<PrepCommonResp<LeaderboardResp>>(){}.getType()); 

解析:Gson的做法非常巧妙,如上面的代碼所示,將需要獲取類型的泛型類作為TypeToken的泛型參數構造一個匿名的子類,然后通過getType()方法就可以獲取到我們想要的泛型類的泛型參數類型??梢岳斫鉃槭菍⒎盒皖愋痛嫫饋?,解決了泛型擦除的問題。

五、最后

感謝您的閱讀,如果喜歡本文歡迎關注和轉發,本頭條號將持續分享IT技術知識。對于文章內容有其他想法或意見建議等,歡迎提出共同討論共同進步。如果您對于此場景有更好的解決方案也歡迎提出討論。

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2024-03-06 08:17:18

Java泛型安全

2021-07-01 06:47:30

Java泛型泛型擦除

2023-03-06 08:33:24

IDEA反編譯類型

2020-12-21 16:18:07

JavaTypeToken泛型擦除

2009-08-24 10:07:57

C#泛型處理

2020-10-20 10:17:20

Java泛型Type

2021-09-29 18:17:30

Go泛型語言

2021-07-29 09:20:18

Java泛型String

2022-03-02 14:41:03

泛型反序列化

2025-05-30 02:31:00

2023-01-05 17:13:28

TypeScript泛型組件

2009-09-25 10:03:51

Java泛型

2020-10-26 14:01:22

Java泛型

2009-08-26 18:02:05

C#泛型問題

2023-11-29 08:19:45

Go泛型缺陷

2021-08-24 08:05:41

泛型類型擦除Class

2024-06-07 10:05:31

2021-06-17 06:51:32

Java泛型Java編程

2025-11-05 03:00:55

2025-01-24 08:19:57

點贊
收藏

51CTO技術棧公眾號

亚洲天堂第二页| 高清欧美一区二区三区| 91最新在线视频| 9191国产精品| a毛片不卡免费看片| 久热在线中文字幕色999舞| 香蕉久久99| 精品亚洲欧美日韩| gogo大胆日本视频一区| 88av在线| 日韩av中文在线| 亚洲精品aaaaa| 欧美在线一二三区| 91麻豆精品视频| 男人天堂网在线观看| 亚洲免费伊人电影在线观看av| 台湾色综合娱乐中文网| 久久久久久久久久久久久久久久av| 成人免费毛片高清视频| 中文字幕在线免费专区| 亚洲精品小视频在线观看| 最近国产精品视频| 亚洲国产成人不卡| 一区二区三区精品久久久| 四虎影院观看视频在线观看| 欧美激情伊人电影| 亚洲影音先锋| gay网站在线| 精品国产三级a在线观看| 国产精品zjzjzj在线观看| 久久精品成人一区二区三区蜜臀| 久久久影视传媒| 黄色动漫在线观看| 欧美又大粗又爽又黄大片视频| 日日噜噜夜夜狠狠视频欧美人| 在线观看免费视频高清游戏推荐| 欧美精品乱码久久久久久| 国产一区二区三区亚洲| 亚洲一区二区三区乱码| 日韩美女久久久| 在线手机中文字幕| 91免费版黄色| 中文字幕欧美区| 捆绑调教日本一区二区三区| 国产日产久久高清欧美一区| 97久久超碰国产精品电影| 麻豆视频在线| 国产日韩欧美在线视频观看| 91首页免费视频| 性网站在线观看| 91老司机在线| 日韩毛片在线免费观看| 97久久香蕉国产线看观看| 国产日韩欧美一区二区三区四区| 中文字幕亚洲电影| 欧美啪啪网站| 视频一区视频二区视频三区视频四区国产| 一区二区三区美女| 麻豆视频久久| 欧美在线观看视频免费| 日韩视频免费观看高清在线视频| 日韩精品免费一区二区三区| 高清一区在线观看| 久久精品成人一区二区三区| 国产在线不卡视频| 24小时免费看片在线观看| 久久av一区二区三区漫画| 欧美性xxxx极品hd欧美风情| 精品美女久久久| 国产二区三区四区| 2019中文字幕全在线观看| 久久精品亚洲国产奇米99| 国产免费不卡| 吴梦梦av在线| 亚洲国产高清自拍| 日本人妖一区二区| a天堂中文在线官网在线| 亚洲综合自拍一区| 一本大道久久a久久综合婷婷| 日本欧美肥老太交大片| 黄色一级影院| 国产精品96久久久久久| 中文字幕亚洲一区二区av在线| 成人性生交大片免费看96| 欧美日韩第二页| 欧美成人免费一级人片100| 91视频在线看| 久久亚洲人体| 热久久精品国产| 欧美激情视频一区二区三区不卡| 久久亚区不卡日本| 国产精品美女在线观看直播| 日韩图片一区| av在线播放不卡| 羞羞视频在线观看免费| 91福利视频久久久久| 99久久夜色精品国产亚洲狼| 成人a视频在线| 国产精品专区一| 午夜天堂影视香蕉久久| 亚洲精品国产首次亮相| 国产高清自拍视频在线观看| 成人在线观看91| 3d动漫精品啪啪1区2区免费| 日韩高清在线一区| 国产精品原创视频| 虎白女粉嫩尤物福利视频| 97热在线精品视频在线观看| 亚洲精品少妇30p| 欧美激情综合色综合啪啪| 男人天堂久久久| 中文字幕一区二区三区乱码| 亚洲石原莉奈一区二区在线观看| 91网站黄www| 亚洲a级精品| av大片在线看| 黄色网址在线免费看| 久久国产精品电影| 亚洲永久免费视频| 亚洲国产网站| 青青热久免费精品视频在线18| 91色国产在线| 91精品久久久久久久久久久| 欧美一级一区二区| 99视频精品免费视频| 精品精品久久| 18视频在线观看网站| 欧美大片在线播放| 国产一区二区视频在线观看| 日韩一区二区三区免费看 | 亚洲激情图片qvod| 欧美在线播放| 免费一二一二在线视频| 无遮挡又爽又刺激的视频| 国产精品久久久久久婷婷天堂| 正在播放亚洲一区| 久久免费看少妇高潮| 五月开心六月丁香综合色啪| 国产盗摄精品一区二区酒店| 国产第一页视频| 亚洲综合在线播放| 一区二区三区四区视频| 精品成人久久av| 国产一区二区剧情av在线| 日韩精品导航| aa在线视频| 波多结衣在线观看| 国产精品一区二区你懂得| 日韩中文在线视频| 色88888久久久久久影院野外| 懂色av一区二区三区免费看| 99国产**精品****| 亚洲精品蜜桃久久久久久| 最新精品在线| 亚洲少妇自拍| 99精品欧美一区二区三区| 51午夜精品国产| 久久久国产综合精品女国产盗摄| 欧美女激情福利| 欧美2区3区4区| 77导航福利在线| 久久精品99国产| 免费国产一区二区| 日本韩国欧美精品大片卡二| 日韩精品免费在线观看| 欧美性xxxxx极品| 91麻豆蜜桃一区二区三区| 亚洲三级网站| 国产精品极品在线观看| 91福利在线尤物| 在线观看一级片| 日韩视频在线免费看| 日韩理论片在线观看| 国产精品美女主播| 久久午夜a级毛片| 亚洲精品在线三区| 色哟哟在线观看一区二区三区| 久久久久久一二三区| 捆绑调教美女网站视频一区| 91成人超碰| 国产精品色呦| 国产韩日精品| 亚洲七七久久综合桃花剧情介绍| 写真福利片hd在线观看| 奇米精品一区二区三区| 欧美久久综合性欧美| 成人福利免费观看| 欧美一区二区大胆人体摄影专业网站| 亚洲精品一区中文字幕乱码| 欧美性受xxxx黑人xyx| 一区二区三区中文免费| 91啦中文在线观看| 国产精品亚洲一区二区三区妖精 | 欧美国产亚洲精品久久久8v| 亚洲成年人影院在线| 色综合天天综合狠狠| 国产精品理论在线观看| 91亚洲精品久久久蜜桃| 国产精品自产自拍| 日本不卡视频在线观看|