public static void main(String[] args) {
String tr = "[{\"key\":\"foo\"}, {\"key\":\"shoe\"}]";
List<MyClass> o = new Gson().fromJson(tr, getType());
for (MyClass object : o) {
System.out.println(object);
}
}
public static <T extends MyClass> Type getType() {
return new TypeToken<List<T>>() {
}.getType();
}
public static class MyClass {
private String key;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
@Override
public String toString() {
return "X{" +
"key='" + key + '\'' +
'}';
}
}
我正在试着理解GSON是如何使用泛型的. 我在上面的主方法中遇到了错误.
线程"main"中出现异常java.lang.ClassCastException:无法将类com.google.gson.inder.LinkedTreeMap强制转换为类org.example.Main$MyClass(com.google.gson.inder.LinkedTreeMap和org.example.Main$MyClass位于加载器‘app’的未命名模块中)
由于类型擦除,不应在方法getType()中将T设置为MyClass.那么,gson应该创建一个List<MyClass>
而不是List<Object>
的实例?为什么T在这里被视为对象,而不是MyClass?
我试着运行这个代码,但它给了我错误.