在我的应用程序中,我获得这种格式的 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/