java - 我的模型的简单继承问题

标签 java android inheritance gson

在我的应用程序中,我获得这种格式的 JSON 数据

{
    "data": {
        "key1": "value1",
        "key2": "value2",
    },
    "success": true
}

我使用 gson 将其解析为对象,这是我的模型:

public class ApiResponse {
    @SerializedName("success")
    @Expose
    private Boolean success;
    @SerializedName("errormsg")
    @Expose
    private String errormsg;

    /**
     * @return The success
     */
    public Boolean getSuccess() {
        return success;
    }

    /**
     * @param success The success
     */
    public void setSuccess(Boolean success) {
        this.success = success;
    }

    /**
     * @return The errormsg
     */
    public String getErrormsg() {
        return errormsg;
    }

    /**
     * @param errormsg The errormsg
     */
    public void setErrormsg(String errormsg) {
        this.errormsg = errormsg;
    }

}

我总是会得到success键,如果它为真,那么data就会在那里,如果不是,那么errormsg就会出现。

现在,我的 JSON 中的 data 键是我的实际模型。

由于所有模型都具有上述属性,因此我正在寻找一种可以扩展该类的方法。

例如:

public class MyModel extends ApiResponse{}

这样我就能做到:

myModel.getData().getKey1();

我尝试重写getData(),但模型会有所不同,因此我能够找到解决方案。

我可以使用嵌套类,但我必须重复此属性并将我的真实模型添加为嵌套类。

如何让我的模型继承相同的公共(public)属性。

此外,data 可以是一个对象或对象列表。

最佳答案

可以使用泛型来解决这个问题。 更具体地说 - 您应该定义基类抽象,如下所示

public abstract class ApiResponse<T> {

    @SerializedName("data")
    private T mData;

    public T getData() {
        return mData;
    }

    //common code - success, etc.
}

然后您可以像这样定义具体的请求类:

public class MyResponse extends ApiResponse<MyData> {

}

还有

getData() 

方法,在 MyResponse 对象上调用将返回解析后的 MyData。当然,您应该在 MyData 类中标记所有可解析字段。

请记住,继承的模型类将期望来自基类的所有字段进行序列化/反序列化,因此您应该保持事物干净并尽可能限制继承深度。

关于java - 我的模型的简单继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34864346/

相关文章:

java - 套接字文件传输 : Receiver stuck in reading from buffer/writing to storage

Swift 继承问题泛型

带有 Catalyst 和 DBIx::Class 的 Perl - 如何在继承树中加载一组类?

java - JProgressBar 定位到窗口底部

java - 在这个 Java 类层次结构中,如何使用泛型来避免类型转换?

android - Android 上的 FFmpeg

android - 如何接收文本短信到特定端口..

python - 继承函数后如何给它更多的参数

用于计算百分比的 Java 算法

Java Swing : Animations made using Thread. sleep() 未按预期工作