當前項目的框架底層返回的數據并不是java對象的情況,本篇文章講述我遇到的一次利用泛型、注解、反射實現數據解析工具類封裝的思路。
1. 需求分析
收到的數據不是我們想要的java bean?類似這個map:
畫個圖感受一下:
結構是<int,[]>,類似key-value,但key是int,value是數組。通過2013獲取到name[],通過2014獲取到code[]。用代碼的話,類似這樣:
為什么會出現這樣的需求呢?為什么不是json直接就用gson、fastJson轉換成對象實例了呢?人在江湖飄,總會遇到一些神奇的事情。
我的原因是:項目里面是因為框架成型,和后臺交互模式也使用多年,是不可能說換個方式的。但是有時候確實需要換成對象來操縱。
如何把[]對應的數據一一轉換成對象去操縱呢?
變成Person(小李,xl)、Person(小明,xm)...
痛點
呵!程序員!這不是很簡單嗎?
寫個for循環不就over了嗎?
但是假如不止兩個變量呢?寫串代碼感受一下:
這么些個變量,已經寫煩了,更多更煩。而且不只是這么一個頁面,其他頁面也會這樣的。
2. 頭腦風暴
要是Rxjava + Retrofit + Gson的方式就好了,直接就出來了...
叮!想到了,用注解,retrofit不就是用注解玩的。我們用注解把id和變量綁定,然后用泛型來傳參,既然是泛型,就需要反射進去獲取變量Field,再獲取注解得到id,再根據id去取值再設置進反射生成的對象實例里面去。最后返回對象列表List...
3. 代碼實現
首先,創建一個注解,用來綁定id,這個id,姑且叫你:
使用必要的元注解,變量當然只有一個id:
然后就去按照和后臺定義好的,比如2013對應的是name,2014對應的是code這樣一個個去綁定一下:
反正只是演示,偷懶還是只寫兩個變量。
然后我們去寫一寫轉換邏輯:
4. 檢驗成果
完美!
本來好幾行的代碼,現在一行就搞定了,即使不是Person類,換一個Girl類、Student類都ok,一樣一行。即使數據不再是<int,String[]>的結構了,多少這也是一個思路。