具有以下结构(在 Android Java 项目中):
public abstract class A {
...
}
public class B extends A {
...
}
public class C extends A {
...
}
在某些时候需要存储父类类型的列表,因为我们正在使用多态性。
但是,如果我们尝试像这样存储父类型的对象:
A aObject = xObject; //(xObject could be an object of type B or C)
Backendless.Persistence.save(aObject, new AsyncCallback<A>() { ...
我们将收到“无法更新没有任何属性的对象:CREATOR”错误,因为我们正在尝试存储抽象类。
有可能实现这个目标吗?子类 B 和 C 之间的区别在于它们执行某些操作(例如渲染某些图像和文本)的方式。
编辑1:具体案例
具体案例是一个用于创建 Memes 的 Android 应用程序(Meme 是一个有趣的图像,里面有一些文字)。在这种情况下,模因可以以经典方式绘制,即顶部带有文本,底部带有另一个文本的图像。Memes 也可以绘制为 Quote,它是一个右侧带有黑色方块的图像,其中包含一个句子和下面的作者。
为了模拟这个问题,我创建了一个抽象类 Meme,其中包含属性(名称、topText、bottomText、图像等)和子类应该用来绘制图像的方法,以及两个子类 ClassicMeme 和 QuoteMeme,它们绘制模因以他们自己的方式。
问题是当用户创建 Meme 时,他可以切换要绘制的 Meme 类型,所以我需要一个多态引用来处理这种情况。当我继续存储 Meme(基类)对象时,我意识到这是不可能的,因为 Meme 是一个抽象类,当然我不知道这个基类引用中包含什么样的子对象。(希望我已经解释清楚了)。