对于上下文,我们将大部分数据存储为 JSON 字符串。这与后端的 Hadoop 配合得非常好,并且在前端的 Ruby 中很容易处理。我的数据类型符合继承的自然模式。
为简单起见,假设我有一个 Pet 类和一个喂宠物的进程 FeedPet。我还有一个进程WalkDog,它只适用于Dog,它是一种宠物。我的数据是经过组织的,因此我永远不必担心试图遛一只不是狗的宠物。
我想做的是让 Pet 和 Dog 扩展 Pet,Dog 有一个额外的方法“getLeash()”,但我不知道如何将它映射到 JSON。
相反,我有一个带有物种数据哈希图的 Pet 类,因此 WalkDog 进程将调用 pet.getSpeciesData("leash") 而不是 dog.getLeash()。
我可以创建一个 Dog extends Pet,并且可以使用 Jackson 库将其序列化为 JSON。JSON 对象将有一个 leash 字段。但假设我想喂饱所有的宠物。所有宠物都有一个 getFood() 方法。因此 FeedPet 进程将对象反序列化为 Pet。但这失去了皮带领域。
WalkDog 进程可以做到这一点,因为它知道它的所有输入都将是 Dog,因此它可以将其作为 Dog 读取并将其作为 Dog 写回。
有什么方法可以将 java 对象序列化为 JSON,以便我可以保留它们的类型?我在想像 Rails 单表继承这样的东西,但它必须是 JSON 库可以理解的东西。