【发布时间】:2013-01-08 08:36:41
【问题描述】:
我正在编写一个类,它将连接到服务器并基于一些参数,检索一个 json 字符串,该字符串将使用 GSON 解析到指定的(通过泛型)类。
负责班级的精简版如下所示:
class Executor<T> {
private Response<T> response;
public void execute() {
Type responseType = new TypeToken<Response<T>>() {}.getType();
this.response = new Gson().fromJson(json, responseType);
}
public Response<T> getResponse() { return this.response; }
}
(JSON-变量looks like this。)
反序列化后存储数据的类如下所示:
class Response<T> {
private List<T> data = null;
public List<T> getData() { return this.data; }
}
数据试图反序列化到的类:
public class Language {
public String alias;
public String label;
}
并且运行的代码利用了上面的类:
Executor<Language> executor = new Executor<Language();
List<Language> languages = executor.execute().getResponse().getData();
System.out.println(languages.get(0).alias); // exception occurs here
这会导致以下异常
ClassCastException:com.google.gson.internal.StringMap 无法转换为 sunnerberg.skolbibliotek.book.Language
非常感谢任何帮助或建议!
【问题讨论】:
-
你确定异常发生在这一行吗?我看不到在您提供的示例代码中调用 execute() 的位置。
-
@SamuelEUSTACHI 哦,我的错。问题已编辑,当我粘贴代码时它滑出(有点简化)。是的,我 100% 确定,它恰好发生在该行(至少根据堆栈跟踪)。
-
@Zar executor = new Executor
标签: java oop generics reflection gson