Android-泛型轉(zhuǎn)對(duì)象,泛型轉(zhuǎn)對(duì)象List

一、json轉(zhuǎn)對(duì)象:
應(yīng)用場(chǎng)景:接口中一個(gè)數(shù)據(jù)可能為對(duì)象叠洗,也可能是一個(gè)對(duì)象List(此處其實(shí)接口規(guī)范后,完全用不到下邊的方法权逗,沒辦法罐呼,一下方法就是想試試能不能適配這個(gè)情況)

public class HttpBeen<T>  implements Serializable{
    private String result;
    private String errorCode;
    private T ResultData;

}

對(duì)象中采用<T>泛型修飾。以下是將泛型轉(zhuǎn)換為對(duì)象的方法:

/** 對(duì)象類型轉(zhuǎn)換
     * @param obj  源對(duì)象
     * @param cla  目標(biāo)對(duì)象類型
     * @param <T>  泛型
     * @return     目標(biāo)對(duì)象
     */
    public static  <T> T jsonToBean(LinkedTreeMap obj,Class<T> cla) {
        T  dataBean = null;
        try {
            if(null==obj) {
                return null;
            }
            dataBean = cla.newInstance();
            Field[] beanFields = cla.getDeclaredFields();
            //通過set方法給目標(biāo)對(duì)象賦值
            for(Field field:beanFields){
                if (field.getModifiers() == 26) continue;
                field.setAccessible(true);
                String fieldName = field.getName();
                Class<?> fieldType = field.getType();
                String fieldValue = obj.get(fieldName)==null?null:obj.get(fieldName).toString();
                if(fieldValue!=null){
                    try {
                        if(String.class.equals(fieldType)){
                            field.set(dataBean, fieldValue);
                        }else if(byte.class.equals(fieldType)){
                            field.setByte(dataBean, Byte.parseByte(fieldValue));

                        }else if(Byte.class.equals(fieldType)){
                            field.set(dataBean, Byte.valueOf(fieldValue));

                        }else if(boolean.class.equals(fieldType)){
                            field.setBoolean(dataBean, Boolean.parseBoolean(fieldValue));

                        }else if(Boolean.class.equals(fieldType)){
                            field.set(dataBean, Boolean.valueOf(fieldValue));

                        }else if(short.class.equals(fieldType)){
                            field.setShort(dataBean, Short.parseShort(fieldValue));

                        }else if(Short.class.equals(fieldType)){
                            field.set(dataBean, Short.valueOf(fieldValue));

                        }else if(int.class.equals(fieldType)){
                            field.setInt(dataBean, Integer.parseInt(fieldValue));

                        }else if(Integer.class.equals(fieldType)){
                            field.set(dataBean, Integer.valueOf(fieldValue));

                        }else if(long.class.equals(fieldType)){
                            field.setLong(dataBean, Long.parseLong(fieldValue));

                        }else if(Long.class.equals(fieldType)){
                            field.set(dataBean, Long.valueOf(fieldValue));

                        }else if(float.class.equals(fieldType)){
                            field.setFloat(dataBean, Float.parseFloat(fieldValue));

                        }else if(Float.class.equals(fieldType)){
                            field.set(dataBean, Float.valueOf(fieldValue));

                        }else if(double.class.equals(fieldType)){
                            field.setDouble(dataBean, Double.parseDouble(fieldValue));

                        }else if(Double.class.equals(fieldType)){
                            field.set(dataBean, Double.valueOf(fieldValue));

                        }else if(Date.class.equals(fieldType)){
                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
                            field.set(dataBean, sdf.parse(fieldValue));
                        }
                    } catch (IllegalArgumentException e) {
//                        e.printStackTrace();
                        return null;
                    } catch (ParseException e) {
//                        e.printStackTrace();
                        return null;
                    }

                }
            }

        } catch (Exception e) {
            return null;
//            e.printStackTrace();
        }
        return dataBean;
    }

此處LinkedTreeMap的原因是項(xiàng)目采用Retrofit+OKHttp的方式網(wǎng)絡(luò)框架继控,Gson解析械馆,泛型情況下Gson會(huì)將格式擦除,轉(zhuǎn)換為L(zhǎng)inkedTreeMap武通。

二霹崎、json轉(zhuǎn)對(duì)象List:

/**
     * 對(duì)象數(shù)組類型轉(zhuǎn)換
     * @param json  源對(duì)象
     * @param clas  目標(biāo)對(duì)象類型
     * @param <T>  泛型
     * @return  目標(biāo)對(duì)象
     */
    public static <T> List<T> jsonToBeanList(String json, Type clas) {
        Gson gson = new Gson();
        List<T> list = new ArrayList<>();
        JsonParser parser = new JsonParser();
        JsonArray jsonarray = parser.parse(json).getAsJsonArray();
        for (JsonElement element : jsonarray) {
            list.add(gson.fromJson(element, clas));
        }
        return list;
    }

這個(gè)沒啥說的,自己百度看解析吧冶忱。
以上方法借鑒了一些大神的方法思路

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尾菇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子囚枪,更是在濱河造成了極大的恐慌派诬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件链沼,死亡現(xiàn)場(chǎng)離奇詭異默赂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)括勺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門缆八,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谒臼,“玉大人,你說我怎么就攤上這事耀里◎阽停” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵冯挎,是天一觀的道長(zhǎng)底哥。 經(jīng)常有香客問我,道長(zhǎng)房官,這世上最難降的妖魔是什么趾徽? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮翰守,結(jié)果婚禮上孵奶,老公的妹妹穿的比我還像新娘。我一直安慰自己蜡峰,他們只是感情好了袁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著湿颅,像睡著了一般载绿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上油航,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天崭庸,我揣著相機(jī)與錄音,去河邊找鬼谊囚。 笑死怕享,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的镰踏。 我是一名探鬼主播函筋,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼余境!你這毒婦竟也來了驻呐?” 一聲冷哼從身側(cè)響起灌诅,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤芳来,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后猜拾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體即舌,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年挎袜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顽聂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肥惭。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖紊搪,靈堂內(nèi)的尸體忽然破棺而出蜜葱,到底是詐尸還是另有隱情,我是刑警寧澤耀石,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布牵囤,位于F島的核電站,受9級(jí)特大地震影響滞伟,放射性物質(zhì)發(fā)生泄漏揭鳞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一梆奈、第九天 我趴在偏房一處隱蔽的房頂上張望野崇。 院中可真熱鬧,春花似錦亩钟、人聲如沸乓梨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)督禽。三九已至,卻和暖如春总处,著一層夾襖步出監(jiān)牢的瞬間狈惫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工鹦马, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胧谈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓荸频,卻偏偏與公主長(zhǎng)得像菱肖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旭从,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容