gpt4 book ai didi

java - Backendless - 将对象保存为父类

转载 作者:行者123 更新时间:2023-11-30 10:44:33 25 4
gpt4 key购买 nike

具有以下结构(在 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 可以用经典的方式绘制,即顶部有文本的图像和底部有另一个文本的图像。 Memes 也可以画成 Quote,这是一个右边有一个黑色方 block 的图像,下面是一个句子和作者。

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

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

最佳答案

你出现这个问题的原因是类:

perform some actions like rendering some image and text differently

此问题/要求与您的数据模型类无关,因此不应属于同一类。数据模型类应该是只有属性且实际上为零功能的普通类。

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

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

关于java - Backendless - 将对象保存为父类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37374298/

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