gpt4 book ai didi

java - 使用 JSON 反序列化器,如何更改父类(super class)字段的映射?

转载 作者:行者123 更新时间:2023-11-30 11:16:16 28 4
gpt4 key购买 nike

我正在使用一个抽象类管理一个数据库,该抽象类有很多方便的方法。特别是,它具有 insert(Context)update(Context)delete(Context),这意味着您可以创建一堆不同的对象继承这个类的,都有自己的数据库映射,只需要一个一个更新或插入即可。

另一位开发人员已将 GSON 反序列化标记添加到此结构中。这工作正常,除了更新功能依赖于比较对象的唯一标识符;用作标识符的特定事物因对象而异。这意味着虽然具有 update(...) 方法的父类(super class)具有

@SerializedName("id")
protected String mUUID;

子类需要不同的映射。

目前,我正在通过重写子类中的 update(...) 方法来解决此问题,以使用不同的标识字段进行比较,但这并不令人满意。是否可以将不同的序列化名称映射到 GSON 中的父类(super class)字段,如果可以,您是怎么做到的?

澄清一下,类结构大致是

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 的映射,因此我可以使用与父类(super class)中相同的主要 ID 机制(例如更新方法),但传入 JSON 中的不同字段标识不同的对象。

最佳答案

我认为事物将具有从传入 JSON 映射的属性,例如 String customID、String foo、String bar?

如果你能以某种方式覆盖每个 Thing 成员变量的 setter - 也许是生命周期事件,或者如果你在你的类中提供 setCustomID(String customID) GSON 将使用它而不是注释?然后你可以简单地调用 super.setId(customID)。

这就像一个“动态”或“计算”字段。

这篇文章表明 GSON 不太可能支持属性设置/获取。

Why does GSON use fields and not getters/setters?

关于java - 使用 JSON 反序列化器,如何更改父类(super class)字段的映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24959167/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com