die folgende Struktur (in einem Android-Java-Projekt):Backendless - Objekt speichert als Elternklasse
public abstract class A {
...
}
public class B extends A {
...
}
public class C extends A {
...
}
Irgendwann sie benötigt wird eine Liste der übergeordneten Klasse-Typen zu speichern, weil wir Polymorphismus verwenden.
Aber wenn wir versuchen, ein Objekt von Muttertyp wie folgt zu speichern:
A aObject = xObject; //(xObject could be an object of type B or C)
Backendless.Persistence.save(aObject, new AsyncCallback<A>() { ...
Wir werden ein „Update kann nicht Objekt ohne Eigenschaften: CREATOR“ erhalten Fehler, weil wir versuchen, eine abstrakte Klasse zu speichern .
Ist es möglich, dieses Ziel zu erreichen? Der Unterschied zwischen den untergeordneten Klassen B und C besteht in der Art und Weise, in der sie einige Aktionen wie das Rendern von Bild und Text ausführen.
Edit 1: Sonderfall
Der spezielle Fall ist ein Android-App Memes zu erstellen (ein Meme ist ein lustiges Bild mit Text nach innen). In diesem Fall können Memes auf die klassische Weise gezeichnet werden, bei der es sich um ein Bild mit einem Text auf der Oberseite und einem anderen Text auf der Unterseite handelt. Meme können auch als Zitat gezeichnet werden, das ist ein Bild mit einem schwarzen Quadrat rechts, das einen Satz und den Autor unten enthält.
Um dieses Problem zu modellieren, habe ich eine abstrakte Klasse Meme erstellt, die die Attribute (name, topText, bottomText, image usw.) und die Methoden enthält, die untergeordnete Klassen zum Zeichnen des Bildes verwenden sollten, und zwei untergeordnete Klassen ClassicMeme und QuoteMeme, die das Meme auf ihre eigene Weise zeichnen.
Das Problem ist, dass wenn ein Benutzer ein Meme erstellt, er den Typ von Meme wechseln kann, um zu zeichnen, also brauche ich eine polymorphe Referenz, um mit dieser Situation umzugehen. Wenn ich fortfahre, das Meme (Basisklasse) -Objekt zu speichern, merke ich, dass das nicht möglich ist, weil Meme eine abstrakte Klasse ist, und natürlich weiß ich nicht, welche Art von Kindobjekt in dieser Basisklassenreferenz enthalten ist. (Hoffe ich habe es deutlich erklärt).
Also sind alle Dateneigenschaften in der Oberklasse, und es ist mit der Persistenzschicht registriert? Was passiert, wenn Sie vom Server herunterladen? Composition ist wahrscheinlich ein besseres Modell für Sie ... – Wain
Ich habe über Zusammensetzung nachgedacht, um dieses Problem zu lösen, aber ich sehe es nicht klar, können Sie bitte eine Antwort mit einem Beispiel geben? –