从fastjson的TypeReference用法,推导如何实现泛型反射
1.fastjson帶泛型反序列化的用法
fastjson
?
2.我們來看看TypeReference的源碼是什么
TypeReference
* 我們發(fā)現(xiàn)TypeReferenced的構(gòu)造方法是保護(hù)方法,也就是你無法直接實(shí)例化,你實(shí)例化出來的都是TypeReference的匿名子類 * 在構(gòu)造方法里面有些我們平常沒接觸過的東西他們是什么呢?3.下面我來看看TypeReference構(gòu)造方法中到底是些什么東西
* 構(gòu)造方法中第一句,從字面上的意思解釋就是獲取當(dāng)前對象的泛型父Class,實(shí)際上他的作用也是這樣的Type superClass = this.getClass().getGenericSuperclass();* 第二句就是獲取泛型父Class的泛型參數(shù)this.type = ((ParameterizedType)superClass).getActualTypeArguments()[0];4.Ok!下面我們通過自己的例子來獲取泛型對象的泛型實(shí)際參數(shù)
*目的:通過FanDemo獲取FanDto泛型類型第一步夠著兩個(gè)類,一個(gè)是實(shí)際的泛型對象FanDto,一個(gè)是用來獲取泛型參數(shù)的類FanDemo
FanDto
?
FanDto
第二步我們獲取父泛型類FanDemo
獲取FanDemo
輸出結(jié)果:
?
輸出結(jié)果
我發(fā)現(xiàn)我們已經(jīng)獲取到了泛型父類FanDemo
第三步通過泛型父類獲取目的泛型類FanDto
泛型父類類型為ParameterizedType類型,通過getActualTypeArguments獲取泛型參數(shù)數(shù)組
獲取FanDto
?
輸出結(jié)果:
輸出結(jié)果
這個(gè)時(shí)候我們獲取到了我們想要的泛型對象FanDto,接下來我們需要獲取FanDto的泛型參數(shù)
第四步 獲取FanDto的泛型參數(shù)T的類型
獲取泛型參數(shù)T
輸出結(jié)構(gòu)為:
輸出結(jié)果
?
這個(gè)時(shí)候我們得到了FanDto的泛型類型為String,ok 大功告成
最后通過獲取泛型對應(yīng)的字段
獲取泛型對應(yīng)的字段
?
輸出結(jié)果為:
輸出結(jié)果
注:泛型類型在編譯的時(shí)候都會別轉(zhuǎn)成Object不會留下任何預(yù)設(shè)對象的信息,所以必須要通過這種方式才能獲取到泛型類型,這數(shù)據(jù)泛型擦除的內(nèi)容,這里我就不細(xì)講了
?
總結(jié)
以上是生活随笔為你收集整理的从fastjson的TypeReference用法,推导如何实现泛型反射的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ThreadLoacl,Inherita
- 下一篇: 推荐系统常用术语