通用模型类

时间:2019-07-15 09:38:14

标签: java android android-studio

我正在使用某些Web服务,并且有许多Web服务用于检索信息。由于有许多Web服务,因此我创建了一个模型类,以映射Web服务的结果。

尽管Web服务的响应结构相同,但内容不同。因此,我创建了一个通用模型来捕获如下所示的响应。

public class GenericResponse<T> {
    private List<T> Results;
    private ErrorResponseModel Status;

    public List<T> getResults() {
        return Results;
    }

    public ErrorResponseModel getStatus() {
        return Status;
    }
}

我希望将此结果分配给相关模型,以便可以使用getter访问数据。

List<SomeModelClass> result= webServiceResponse.getResults();

但是使用上述方法,当我尝试访问getter时,会出现以下提到的错误。

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

这样做的正确方法是什么?

  

注意::有一种方法,我尝试过,您可以将此响应转换为Gson,然后使用   相关的对象类。这样就可以了,但是不知道是否   好的做法。

1 个答案:

答案 0 :(得分:1)

您的课程有一个问题,您总是希望结果是一个列表。 您可以做的就是将结果更改为private T result,在这种情况下,如果您的结果为String,则T为字符串,如果result为Foos列表,则T为{{1} }。

编辑

如果您对结果的序列化有疑问,则需要为该类型定义List<Foo>

JsonDeserializer

并注册

     class MyResultDeserializer implements JsonDeserializer<MyResult>() {
       public Id deserialize(JsonElement json, Type type, JsonDeserializationContext context)
           throws JsonParseException {
         return new MyResult(id.getValue());
       }
}