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