Backendless - 将 object 另存为 parent class

Backendless - Save object as parent class

具有以下结构(在 Android Java 项目中):

public abstract class A {
   ...
}

public class B extends A {
   ...
}

public class C extends A {
   ...
}

在某些时候需要存储 parent class 类型的列表,因为我们正在使用多态性。

但是,如果我们尝试像这样存储 parent 类型的 object:

A aObject = xObject; //(xObject could be an object of type B or C)
Backendless.Persistence.save(aObject, new AsyncCallback<A>() { ...

我们将收到 "Cannot update object without any properties:CREATOR" 错误,因为我们正在尝试存储摘要 class。

这个目标有可能实现吗? child classes B 和 C 之间的区别在于它们执行某些操作(例如渲染某些图像和文本)的方式。

编辑 1:具体案例

具体案例是一个 Android 应用程序来创建模因(模因是一个有趣的图像,里面有一些文字)。在这种情况下,Memes 可以用 classic 方式绘制,这是一个图像,上面有一个文本,另一个文本在底部。 Memes 也可以画成 Quote,它是一张图片,右边有一个黑色方块,下面是一个句子和作者。

为了模拟这个问题,我创建了一个抽象 class Meme,其中包含属性(名称、topText、bottomText、图像等...)和 child classes 应该用来绘制图像,还有两个 child classes ClassicMeme 和 QuoteMeme,它们以自己的方式绘制模因。

问题是用户在创建Meme时可以切换Meme的类型来绘制,所以我需要一个多态引用来处理这种情况。当我继续存储 Meme (base class) object 时,我意识到这是不可能的,因为 Meme 是一个抽象的 class,当然我不知道是什么样的 child object 包含在此基础 class 参考中。 (希望我解释清楚了)。

您遇到此问题的原因是 classes:

perform some actions like rendering some image and text differently

此问题/要求与您的数据模型 classes 无关,因此不应在同一个 class(es) 中。数据模型 classes 应该是普通的 classes,只有属性和有效的零功能。

因此,您应该创建一些 'presenter' classes 或类似的东西,以拥有与数据显示方式相关的逻辑。当您需要显示数据时,创建其中一个 class 的实例,并将数据模型 class 的实例传递给它。然后它可以获取所需的数据并根据需要显示它。

通过这种方式,您的数据模型和持久层干净且有效,并且您可以轻松添加所需的任何表示样式,而不会影响该数据模型。