我使用抽象类管理数据库,抽象类有一堆方便的方便方法。特别是它有insert(Context)
,update(Context)
和delete(Context)
,这意味着您可以创建一堆继承此类的不同对象,所有这些对象都有自己的数据库映射,只需更新或逐个插入它们。
另一位开发人员已将GSON反序列化标记添加到此结构中。这工作正常,但更新功能依赖于比较对象'唯一标识符;用作标识符的特殊事物因对象而异。这意味着虽然具有update(...)
方法的超类具有
@SerializedName("id")
protected String mUUID;
子类需要不同的映射。
目前我通过覆盖子类中的update(...)
方法来使用不同的识别字段进行比较来解决这个问题,但这非常不令人满意。是否可以将不同的序列化名称映射到GSON中的超类字段,如果是这样,您是如何做到的?
为了澄清,类结构大致是
public abstract class DatabasePersistent {
//...
@SerializedName("id")
protected String mUUID;
//...
public int update(Context context) {
return context.getContentResolver().update(
getContentProviderURI(), //abstract, allows objects to update the right table
toContentValues(), //abstract, converts the object to a ContentValues
UUID_EQUALS, //this is a where clause string
new String[]{mUUID}
);
}
}
我想做一个
public class Thing extends DatabasePersistent {
//all the abstract implementations
//and so on
}
以某种方式改变了mUUID的映射,因此我可以使用与超类中相同的主ID机制(例如更新方法),但在传入的JSON中使用不同的字段来识别不同的对象。
答案 0 :(得分:1)
我认为它将拥有属性,如String customID,String foo,String bar,它们是从传入的JSON映射的?
如果你能以某种方式覆盖每个Thing成员变量的setter - 也许是生命周期事件,或者如果你在类中提供setCustomID(String customID),GSON会使用它与注释吗?然后你可以简单地调用super.setId(customID)。
这就像一个“动态”或“计算”字段。
这篇文章表明GSON不太可能支持属性设置/获取。