第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有動態(tài)ArrayList項目類型的GSON TypeToken

具有動態(tài)ArrayList項目類型的GSON TypeToken

森林海 2019-07-05 14:36:57
具有動態(tài)ArrayList項目類型的GSON TypeToken我有個密碼:Type typeOfObjectsList = new TypeToken<ArrayList<myClass>>() {}.getType(); List<myClass> objectsList = new Gson().fromJson(json, typeOfObjectsList);它將JSON字符串轉(zhuǎn)換為List物體。但現(xiàn)在我想要這個ArrayList具有動態(tài)類型(不僅僅是myClass),在運行時定義。這個ArrayList項目類型將用反射.我試過這個:    private <T> Type setModelAndGetCorrespondingList2(Class<T> type) {         Type typeOfObjectsListNew = new TypeToken<ArrayList<T>>() {}.getType();         return typeOfObjectsListNew;     }但不管用。這是例外:java.sql.SQLException: Fail to convert to internal representation: {....my json....}
查看完整描述

3 回答

?
慕田峪9158850

TA貢獻(xiàn)1794條經(jīng)驗 獲得超7個贊

從gson2.8.0開始,您可以使用TypeToken#getParameterized(Type rawType, Type... typeArguments)若要創(chuàng)建TypeToken,然后getType()應(yīng)該能行。

例如:

TypeToken.getParameterized(ArrayList.class, myClass).getType()


查看完整回答
1 反對 回復(fù) 2019-07-05
?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗 獲得超1個贊

您提議的語法無效。以下內(nèi)容

new TypeToken<ArrayList<Class.forName(MyClass)>>

無效,因為您試圖傳遞一個方法調(diào)用,其中需要類型名稱。

以下內(nèi)容

new TypeToken<ArrayList<T>>()

由于泛型(類型擦除)和反射的工作方式不可能實現(xiàn)。整體TypeToken黑客工作是因為Class#getGenericSuperclass()執(zhí)行以下操作

返回表示由該類表示的實體(類、接口、原始類型或空)的直接超類的類型。

如果超類是參數(shù)化類型,則返回的Type對象必須準(zhǔn)確地反映源代碼中使用的實際類型參數(shù)。

換句話說,如果它看到ArrayList<T>,那是ParameterizedType它將返回,您將無法提取類型變量的編譯時值。T應(yīng)該會的。

TypeParameterizedType都是接口。您可以提供自己實現(xiàn)的實例。


查看完整回答
反對 回復(fù) 2019-07-05
  • 3 回答
  • 0 關(guān)注
  • 1033 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號