懶人數據填充封裝 —— 注解反射牛刀小試

當前項目的框架底層返回的數據并不是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[]>的結構了,多少這也是一個思路。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容