Google Gson 應用泛型

2021-07-25 20:19:53 字數 2210 閱讀 8383

思考如何解析如下兩個 json 字串

,

"memo":"***"

}

,],

"memo":"yyy"

}

這兩個字串除了「user」屬性內容不同外,其他屬性都是相同的,通常需要新建兩個 pojo 類分別對應這兩個 json 字串進行解析

第乙個 json 字串對應的 pojo 類

class jsonobject 

public

void

setid(int id)

public user getuser()

public

void

setuser(user user)

public string getmemo()

public

void

setmemo(string memo)

}

第二個 json 字串對應的 pojo 類

class jsonobject 

public

void

setid(int id)

public listgetuser()

public

void

setuser(listuser)

public string getmemo()

public

void

setmemo(string memo)

}

如果使用泛型只需要新建如下乙個 pojo 類

class jsonobject

public

void

setid(int id)

public t getuser()

public

void

setuser(t user)

public string getmemo()

public

void

setmemo(string memo)

@override

public string tostring()

}

測試**:

@test

public void test() ,"

+ "\"memo\":\"***\"

}"; string jsonstr2 = ","

+ "],"

+ "\"memo\":\"yyy\"

}"; jsonobjectobject1 = gson.fromjson(jsonstr1,

new typetoken>() .gettype());

system.out.println(object1);

jsonobject> object2 = gson.fromjson(jsonstr2,

new typetoken>>() .gettype());

system.out.println(object2);

}

執行測試結果:

當然也可以通過以下方式解析

@test

public void test() ,"

+ "\"memo\":\"***\"

}"; string jsonstr2 = ","

+ "],"

+ "\"memo\":\"yyy\"

}"; jsonobjectobject1 = gson.fromjson(jsonstr1, jsonobject.class);

system.out.println(object1);

jsonobject> object2 = gson.fromjson(jsonstr2, jsonobject.class);

system.out.println(object2);

}

執行測試結果:

不過這樣解析會有型別未檢查的警告

type safety: the expression of

type jsonobject needs unchecked conversion to conform to jsonobject

泛型 泛型入門 萬用字元 泛型的其它應用

泛型可以解決資料型別的安全性問題,它主要的原理是 是在類宣告的時候通過乙個標識表示類中某個屬性的型別或者是某個方法的返回值及引數型別。這樣在宣告類或例項化的時候只要指定好需要的型別即可。泛型的定義格式 訪問許可權 class 類名稱 泛型型別1,泛型型別2,泛型型別3 訪問許可權 返回值型別宣告 方...

JAVA泛型應用

泛型介面 a.介面上自定義的泛型引數的具體資料型別,是在 其實現類 實現該介面 的時候指定的。b.若在實現該泛型介面的時候,未指定具體的資料型別,則預設為object c.有些時候我們在定義乙個類去實現泛型介面時,我們並不確定這個類將要實現哪種型別的類,這時我們就不能確定介面中的泛型,那麼介面中的泛...

泛型應用範例

定義乙個person類,並為之定義 和基本資訊等屬性。package book inte ce info 定義 類,實現info介面 class contact implements info public string getaddress public void setaddress strin...