前端請求數據,後臺會根據狀態不同返回不同的數據類型,有時是序列化的一堆數據,有時只有一個字符串,整個工程的框架是別人寫好的,基本功能也是封裝好的,要在人家原有的基礎上進行修改,使用的是RxJava2.0,所以寫函數時類型要確定,小白一隻,嘗試了不同的方法以接收後臺傳來的類型不定的數據,試過用?,Object,Map等類型,都不太成,其中用Map是因爲直接看了後臺會傳來的所有數據類型後決定嘗試的,但是回來的一堆數據中包含的一種類型的數據,沒法用默認方法轉換,還要自己重寫Map的某些方法,想着重寫了沒準也不能用,所以就乾脆放棄了,後來又研究了一下返回的幾種數據類型,發現JsonElement是這幾種類型的基類,然後一試,果然成了。
以下是JsonElement的源碼,可以作爲JsonObject、JsonArray、JsonPrimitive或JsonNull
package com.google.gson;/** * A class representing an element of Json. It could either be a {@link JsonObject}, a * {@link JsonArray}, a {@link JsonPrimitive} or a {@link JsonNull}. * * @author Inderjeet Singh * @author Joel Leitch */public abstract class JsonElement {...}
判斷不同的類型,並進行類型轉換
void fun(JsonElement data){
if(data.isJsonObject){
MyInfo userInfo = new MyInfo();
userInfo = new Gson().fromJson(data,MyInfo.class);
}else if(data.isJsonPrimitive()){
String str = null;
str = new Gson().fromJson(data,String.class);
}else if(...)
.....
}