我正在嘗試解決由於使用非類型庫而導致的Java原始類型警告。例如。用於解決原始類型警告的番石榴TypeToken
List dataAsList = response.getDataList();
我知道名單是
List<Map<String,Object>>
類型,但我不知道如何無類型「response.getDataList()」轉換爲類型版本。
我讀了Guava TypeToken可以用於類型問題,但我不知道如何使用這個,我的嘗試不起作用。
我正在嘗試解決由於使用非類型庫而導致的Java原始類型警告。例如。用於解決原始類型警告的番石榴TypeToken
List dataAsList = response.getDataList();
我知道名單是
List<Map<String,Object>>
類型,但我不知道如何無類型「response.getDataList()」轉換爲類型版本。
我讀了Guava TypeToken可以用於類型問題,但我不知道如何使用這個,我的嘗試不起作用。
如果List
的泛型參數是原始類型,即它本身沒有泛型參數,請查看使用Guava解決方案的my answer to a different question。
否則,你可以用Gson做序列化/反序列化。與其他解決方案相比,這可能相對較慢,但實施起來最簡單。假設你每次請求都沒有多次執行此操作,它應該不會比進行任何I/O調用(如數據庫請求)更糟糕。以下示例實際上是Gson API中示例用法的優化修改。
這個例子應該適用於大多數不需要專門序列化的簡單類。
private final static Gson GSON = new Gson();
public static <T> T cast(Object object, TypeToken<T> token){
String json = GSON.toJson(object);
T result = GSON.fromJson(json, token.getType());
return result;
}
用法:
List<Map<String,String>> dataAsList = cast(
response.getDataList(), new TypeToken<List<Map<String,String>>>(){});
免責聲明:
在你描述這個解決方案將無法工作,因爲地圖值類型是Object和GSON不知道哪個輸入您要的確切情況轉換成。我不確定它是否會拋出異常,或者它是否會將其保留爲JsonObject
或其他類型。我會試着更多地研究這個。
看起來'String'具有Object,但任何Number都變成了Double,List變成了ArrayList,POJO變成了com.google.gson.internal.StringMap。基本上,你不能依賴Gson轉換來複制類型,而無需在'TypeToken'中指定它們。 – 2014-12-22 18:50:30
「但我不知道如何將無類型的」response.getDataList()「轉換爲打印版本。」 - >好吧,只需將其轉換爲:'(List
這是我不想做的。我不想獲得類型警告,我也不想取消警告。 – edu00085 2014-11-01 14:49:02
這裏有一些類似的東西,但是對於列表和沒有使用TypeToken:http://stackoverflow.com/a/2848268/4089265 – edu00085 2014-11-01 14:49:39