List<E> 转称List<Person>直接崩溃了
程序直接崩溃了。
不知道哪里出了问题。应该怎么样转化呢?谢谢。
[code=java]
JsonUtil<Person> jsonUtil = new JsonUtil<Person>();
List<Person> personList = jsonUtil.readJsonWithGSON(content);
//for直接崩溃了程序
//cannot be cast to Person
for (Person p : personList) {
LogUtil.log("FirstName>>" + p.getFirstName() + ",LastName>>" + p.getLastName() + ",Role>>" + p.getRole());
}
public class JsonUtil<E> {
public List<E> readJsonWithGSON(String json){
Gson gson = new Gson();
List<E> list = gson.fromJson(json,new TypeToken<List<E>>(){}.getType());
LogUtil.log((Person)p).getFirstName());//OK
return list;
}
}
[/code]
泛型是编译时特性, 运行时候回进行泛型擦除, 也就E会变成Object。
不是for循环崩溃吧, List<Person> personList = jsonUtil.readJsonWithGSON(content); 这个类型转换就错了
解决方案,不用反向。方法readJsonWithGSON中加一个参数呗,
你的代码里readJsonWithGson好像确定了数据是Person类型,那你干嘛还弄泛型啊???
java泛型擦除,这样改就好了
public <T> List<T> readJsonWithJsonList(String json, Class<T> cls) {
Gson mGson = new Gson();
ArrayList<T> mList = new ArrayList<T>();
JsonArray array = new JsonParser().parse(json).getAsJsonArray();
for (final JsonElement elem : array) {
mList.add(mGson.fromJson(elem, cls));
}
return mList;
}