【问题标题】:Using a Class with Generics with GSON使用带有 GSON 的泛型类
【发布时间】:2017-03-29 22:30:12
【问题描述】:

我希望就如何解决此问题获得一些指导。我正在使用第三方 API 获取 JSON 数据。它的结构类似于:

{items: [
    {attribute : Value},
    {attribute : Value}]
 count : value,
 etc
}

items 数组可以保存不同的数据,所以我有一个类:

public Items<T> {
    private List<T> items;
    // Others API Variables

    public List<T> getItems(){
        return items;
    }

    public void setItems(List<T> items){
       this.items = items;
    }
    // Other Getters/Setters
}

我在调用类中尝试做的是:

public CallingClass {

    public void Method(){
    //Code to get reader object
    Items<User> userItems = Gson().fromJson(ReaderObject, Items.class);
    //Other processing code
    }
}

我得到了错误:

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to User.class

我正在阅读this 的帖子,我认为解决方案与我需要的类似,但我不知道该找谁。我的想法是有一个 Items 类,可以传递返回的不同类型。

想法,帮助,任何事情都会有帮助。

编辑:

好吧,所以我现在感觉自己像个白痴,但睡一觉有帮助。解决方案在我发布的链接中,我只是不需要列表。我的编码解决方案如下:

public CallingClass {

    public void Method(){
    //Code to get reader object
    Items<User> userItems = Gson().fromJson(ReaderObject, new TypeToken<Items<User>>(){}.getType());
    //Other processing code
    }
}

【问题讨论】:

  • 您确实链接到您的帖子的副本。您只需要复制粘贴答案并替换为您自己的类名。 new TypeToken&lt;Items&lt;User&gt;&gt;() { }.getType(); 没有工作吗?
  • 是的,一个简单的Items.class 类是不够的。你需要通过new TypeToken&lt;Items&lt;User&gt;&gt;() { }.getType();构造完整的Type

标签: java generics gson classcastexception


【解决方案1】:

好吧,所以我现在感觉自己像个白痴,但睡一觉有帮助。解决方案在我发布的链接中,我只是不需要列表。我的编码解决方案如下:

public CallingClass {

    public void Method(){
    //Code to get reader object
    Items<User> userItems = Gson().fromJson(ReaderObject, new TypeToken<Items<User>>(){}.getType());
    //Other processing code
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多