首页新闻找找看学习计划

请问Java类型转换,直接崩溃了,怎么办?

0
悬赏园豆:30 [已解决问题] 解决于 2017-01-01 23:19

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]

孙泽阳的主页 孙泽阳 | 初学一级 | 园豆:42
提问于:2016-10-13 20:37
< >
分享
最佳答案
0

泛型是编译时特性, 运行时候回进行泛型擦除, 也就E会变成Object。

不是for循环崩溃吧, List<Person> personList = jsonUtil.readJsonWithGSON(content); 这个类型转换就错了

解决方案,不用反向。方法readJsonWithGSON中加一个参数呗,

收获园豆:30
浮生若云 | 菜鸟二级 |园豆:268 | 2016-10-14 08:34
其他回答(2)
0

你的代码里readJsonWithGson好像确定了数据是Person类型,那你干嘛还弄泛型啊???

顾晓北 | 园豆:9520 (大侠五级) | 2016-10-14 09:22
0

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;
}

孙泽阳 | 园豆:42 (初学一级) | 2017-01-01 23:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册