Ich erhalte mehrere Objekte des Typs Foo aus einem Aufruf an eine externe API. Lokal möchte ich diese Objekte mit ein paar zusätzlichen Informationen verarbeiten, also habe ich eine Unterklasse FooSon die diese zusätzlichen Felder hinzufügt. Wie kann ich all diese Objekte, die ich erhalte, in meinen neuen geerbten Typ konvertieren? Downcasting scheint keine Option zu sein, denn diese Objekte sind nicht wirklich FooSon .
Die einzige Lösung, die ich gefunden habe, ist die Erstellung einer Konvertierungsfunktion, die die Foo Objekt als Argument und kopiert dann alle öffentlichen/geschützten Werte in ein neues FooSon Objekt, das dann zurückgegeben wird.
Die Nachteile sind:
- Verlust von Informationen (private Werte)
- Die Konvertierungsfunktion muss angepasst werden, wenn Foo jemals geändert wird.
Die Klasse Foo implementiert weder einen Kopierkonstruktor noch einen Klonoperator. Ich habe den Quellcode von Foo, aber ich möchte ihn nicht ändern, um die Kompatibilität mit zukünftigen Versionen zu wahren. Wenn es jedoch die einzige brauchbare Alternative ist, würde ich die Foo-Implementierung ändern, um zu bekommen, was ich brauche.