在我的应用中,我以此格式获取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
而是。
现在data
中的JSON
密钥是我的实际模型。
由于所有模型都具有上述属性,我正在寻找一种方法extend
该类。
例如:
public class MyModel extends ApiResponse{}
所以我可以这样做:
myModel.getData().getKey1();
我试图覆盖getData()
,但模型会有所不同,所以我能够找到解决方案。
我可以使用嵌套类但我必须重复这些属性并将我的真实模型添加为嵌套类。
如何让我的模型继承相同的公共属性。
data
也可以是对象或对象列表。
答案 0 :(得分:2)
您可以使用泛型来解决此问题。 更具体一点 - 您应该定义基类抽象,如此
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类中标记所有可解析的字段。
请记住,继承的模型类将期望从基类中序列化/反序列化的所有字段,因此您应该保持清洁并尽可能地限制继承深度。