使用带有GSON的泛型类

时间:2017-03-29 22:30:12

标签: java generics gson classcastexception

我希望能就如何解决这个问题找到一些方向。我正在使用第三方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
    }
}

1 个答案:

答案 0 :(得分:0)

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

public CallingClass {

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