我正在尝试解决Java原型警告,因为使用了非类型库。例如。
List dataAsList = response.getDataList();
我知道列表的类型为
List<Map<String,Object>>
但我不知道如何将无类型的“response.getDataList()”转换为类型化版本。
我读过Guava TypeToken可以用于类型问题,但我不知道如何使用它,我的尝试不起作用。
答案 0 :(得分:0)
如果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>>>(){});
声明:
在您描述的确切情况下,此解决方案将无效,因为Maps值类型为Object,Gson不知道您要转换为哪种类型。我不确定它是否会抛出异常,或者它是否会将其保留为JsonObject
或其他类型。我会尝试更多地研究它。